Pull to refresh

Comments 70

очень интересно смотреть, как js начинает применятся не только в качестве украшалки для web страниц, но как полноценный язык разработки. после знакомства с mooTools я познал, насколько js может быть мощным и что он не сильно уступает ruby.
познакомившись с node, я понял, как прекрасен js без браузера…
GWT уже давно это показал, что весь фронтенд может быть только на js :)
пардон, мне какзалось, что GWT просто транслирует Java код в JS, но это немного другой разговор, из разряда трансляторов (например VB в С++ — были подобные штуки)
Сильно уступает, сильно… но не без плюсов, конечно.
я бы не сказал что сильно, большинство фичей и в javascript есть, таких как все классы это объекты, лямбды и т.д.

просто раньше (во всяком случае я сам) его не рассматривали серьезно за пределами браузера или скриптования в играх (и то редко).
Чего нет:

в языке
— Классическое наследование, mix-ins
— method_missing
— destructuring
— &:method
— потоки
— всё — объекты

в комьюнити
— Rails, Rack, Passenger
— DHH, Yehuda Katz

Могу по каждому пункту развернуть, почему это действительно нужно, и написать еще много чего))

В целом, преимуществ node.js два:
— скорость (да, V8 рулит)
— молодость (орентир на асинхронность дан изначально, нет legacy кода)

При этом сам язык менее мощный и выразительный, чем руби (см. выше). Зачем писать на менее мощном языке, при том, что производительность имеет тенденцию повышаться просто из-за следствий закона Мура, я не понимаю.
— наследование — используйте любой каркас типа base2.
— разрушение объектов в языках со сборкой мусора — не дело.
— для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
— Yehuda Katz является контрибутором в такой проект, как jQuery Core.

А вообще это всё новое, поэтому каркасы ещё только начали создаваться. аналог Синатры уже есть.

> используйте любой каркас типа base2
Они кривы в мелочах.
> разрушение объектов в языках со сборкой мусора — не дело.
Вы не поняли. multi.rubyforge.org/text8.html
> для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
Согласен, что в этом классе приложений они не нужны. Тем не менее, я говорил о мощности языка и платформы вообще.
> Yehuda Katz является контрибутором в такой проект, как jQuery Core
и?
>> Yehuda Katz является контрибутором в такой проект, как jQuery Core
> и?
И, следовательно, он есть в нашем сообществе.

> Они кривы в мелочах.

Ничто не мешает поправить видимые вам мелочи самостоятельно.

Всё ведь написано на том же Javascript.
Кривости и-за ограниченности языка, а не из-за багов. Это не исправить.
Yehuda пишет server-side JS?
jQuery на node.js неприменима.
Прежде чем говорить о неприменимости, стоило бы изучить вопрос.

github.com/tmpvar/jsdom/blob/master/example/jquery/run.js

Вы недостаточно изучили предметную область (хотя бы сам язык), а уже считаете себя правее остальных :)
I'm sorry to report that it is going to take more work to get jQuery running on jsdom. Sizzle however does work! I really want to keep jsdom as light as possible, so adding in full browser emulation like env.js is not really a priority at this time.
stackoverflow.com/questions/1801160/can-i-use-jquery-with-node-js
Это от автора jsdom.

По поводу моего незнания, вывод абсолютно нелогичен. И неверен, кстати (полтора года хардкорного JS). ПРавее остальных себя не считаю. Привык оперировать аргументами.
Речь в этой фразе о том, что часть jQuery, включая Sizzle, уже работает.

И надо приложить ещё усилия, чтобы заработали многие другие части API.

Кроме того, это всего-лишь один из подходов.

Например, env.js + rhino github.com/jeresig/env-js, нгш + node.js www.yuiblog.com/blog/2010/04/09/node-js-yui-3-dom-manipulation-oh-my/

Всё активно растёт в настоящее время.
Тем не менее ваш выпад на «jQuery на node.js неприменима», простите, в лужу…
И по многим другим пунктам контраргументов пока не вижу.
Так ведь применима. Движок селекторов — один из самых больших кусков jQuery.
Хорошо бы… еще б им от примитивных типов отказаться…
* и будет тогда все тормозить пипецкак ;)
знаете, а ведь обилие фишек — это не всегда плюс. Достаточно вспомнить хотя бы те же С++ или Perl.

Я сам питонист, но был при ближайшем рассмотрении очарован простотой и элегантностью Javascript. Откровенно говоря, прототипирование мне даже показалось более логичным, нежели привычный ООП с классами. Хотя, конечно, есть и в JS неувязки и неоднозначности.

Простотой — да, но некоторые языковые вещи на нем принципиально невозможны, ввиду отсутствия method_missing, например, или наличия примитивных типов.
ну и что? а что вообще значит «невозможны»? Невозможно Жигуль разогнать до скорости Порше. А сайт собрать можно на любом языке.

Отсутствие какой-либо фишки не значит, что в принципе чего-то сделать нельзя из функционала, а просто значит «это нельзя сделать так, как мы привыкли это делать в любимом языке».
проблема вашей логики в том, что вы записываете в недостатки ДжаваСкрипта то, что он не такой как Руби. ДжаваСкрипт другой. Вот и все. И то, что в руби реализован какой-то синтаксический сахар не значит, что джаваскрипт плох из-за того, что в нем это реализуется другим способом.
А сайт-то можно хоть на асме написать…
В js тоже можно сказать все объекты (есть примитивы, конечно типо number, string, но при вызове метода у примитива создается обертка-объект). Mix-in фактически это просто копирование методов и реализуется просто. Насчет destructuring это есть в js 1.7 — https://developer.mozilla.org/en/New_in_Javascript_1.7#Destructuring_assignment_(Merge_into_own_page.2fsection), а в ECMAscript Harmony (aka ECMAscript 6) это планируется внедрить также как и method_missing (в js это будет noSuchMethod). Также есть форк node.js с реализацией noSuchMethod. А комьюнити дело времени =)
> при вызове метода у примитива создается обертка-объект
Не во всех случаях.
10.times(function(){})
«preved».encode()

Mix-in — совсем не копирование методов. Сохраняется связь. Например, при добавлении метода в примешиваемый модуль он появится у всех объектов, с включенным этим модулем.
10.times(function(){})
«preved».encode()

У number первая точка является отделением от дробной части числа, поэтому в случае с number нужно либо так: 10..times(function(){...}) либо так (10).times(function(){...}) (В спеке все описано). Про строку не понял. Достаточно добавить свой метод в прототип String и все работает. С mix-in верно, связи не будет, но не припомню случая, когда mix-in динамически менялся у меня.
Да, я неправ. Где-то в другом месте у меня это стреляло. Тут все клёво.
Про mix-ins — манкипатчинг усложняется сильно если связи нет.
Отличный фреймворк, хотя и немного отстаёт от выхода новых версий Node.
Кто-нибудь поделится опытом использования NodeJS в более-менее серьезных проектах? Интересно бы почитать плюсы, минусы…
Я уже перевёл один из проектов с Синатры на node.js, полёт нормальный.

Пока не хватает асинхронного биндинга к mysql, хотя есть три проекта, которые планируют таковыми стать (node-libmysqlclient, node-libdrizzleclient).
> речь об этой болванке

Это уже много, кстати. Надо просто это добить до ума.
Это точно, как я свой биндинг не добью для MySQL 5.0 + CentOS, пока что падает.
Ой, а вы не скажете, что там с производительностью, сколько примерно запросов в секунду на типичную страницу с контроллером/моделькой/шаблоном получается?
У меня задача не упиралась в производительность. Сейчас померил — чуть более 4000 запросов в секунду держит, но надо бы ещё померять старое.
Ну так это хорошо :) Жаль, в Javascript нет модулей, require_once, классов, наследования и *нативной* (не на яваскрипте) функции Object.extend(), e нас в PHP 50-100 запросов в секунду всего лишь :'(
Какая разница, если Javascript всё равно компилируется в нативный код?
И железо примерно какое, скажите пожалуйста? Я ж теперь спать спокойно не могу, пока у кого то 4000 запросов в секунлу выполняется.
На этом железе много чего висит, помимо данной задачи,

Сейчас нагрузка выросла, скорость упала:
Requests per second: 3151.96 [#/sec] (mean)

Fedora Core 12 на Intel® Xeon(TM) CPU 2.80GHz

cat /etc/cpuinfo показывает 4 процессора по 1 ядру.
У меня просто очень специфичная задача.

На более классической работе вполне проседает до 50 запросов в секунду.

К тому же node.js пока ещё в мастере не поддерживает префоркинг, что ограничивает производительность.
Интересно, почему в последнее время всё чаще упоминается Node.js, а Jaxer, напротив, упоминался лишь пару раз после выхода?
node.js банально проще (меньше лишнего) и создан как событийный сервер.
можно разделить на группы и подключать через require
это неудобно. сделайте роуты запросов в файлы
Это разные подходы.

Express — является клоном Sinatra (http://www.sinatrarb.com), идеального каркаса для маленьких приложений.

При желании можно использовать каркас, более близкий к Rails.

Их сейчас более 14, рекомендую посмотреть на Geddy или Bomber.

Кстати, wiki.github.com/ry/node/modules#web-frameworks-full
и когда приложение вырастает предлагаете всё нафиг переписывать?

зачем клонировать глупости, предназначенные лишь для «привет мир»?
Вы просто не знакомы с некоторыми идеями гибкого программирования.

Одна из важнейших идей — не писать ничего на вырост. Когда приспичит, дописать необходимое, и отрефакторить.
эта недальновидная идея слишком развращает неокрепшие умы программистом и позволяет им оправдывать свою безалаберность в разработке архитектуры, которая должна быть максимально гибкой и не приводить к экспоненциальному росту сложности по мере развития проекта
Это обычный подход для большинства приложений.

В тех же Rails маршруты обычно все прописываются в одном файле (config/routes.rb).
это глупый подход, который усложняет приложение
это как? вообще все? или как в Джанго — принято расщеплять на куски?
Вариантов много.

Обычно в одном файле, ибо этого достаточно.

Но разные плагины и rails engines (модули типа Вики, блогов и т.д., к примеру), к примеру, могут дописывать свои маршруты.

А не в курсе сколько памяти ест сервер?
Интересно в сравнении с пхп движками. Хостинг для пхп дешевый, порой для клиента это решающая роль.
Не могу сравнить, нет PHP на сервере :)

соберите и запустите пример у себя, это просто (configire, make, make install).
да я собрал запустил. При простое жрет 9мб. При нагрузках серьезных до 50 доходит. Сравнил с синатрой с запущенным одним монгрелом, у синатры 50мб, как без нагрузки так и с ней. Вот только с пхп не знаю как сравнивать) Там куча вариантов и не знаю как тестить)
При наличии idle time сервер node.js агрессивно запускает сборку мусора.

Так что потребление памяти будет плавать.
Сборщик мусора вообще порадовал. А то у всех остальных со временем бывает потребление памяти только растет.
Я вот теперь думаю если писать сайты js + mongodb например, то теперь можно будет клиентам предлагать сайты с дешевым vps 128 или даже 96мб памяти. А то писать на рельсах визитки или на других руби фреймворках выходит затратно.
Для визиток есть Jekyll etc. :)
Ребята! А напишите, пожалуйста, топик в духе «SSJS: первый HelloWorld» =] (гугл молчит)
Очень хочется попробовать написать какой-то на серверном JS, но боюсь дальше освоения Денвера я не ушел :(
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(80, "0.0.0.0");
sys.puts('Server running at 0.0.0.0:80/');
Вот я потому и попросил написать топик, чтобы избежать в комментах вопросов: «А где его запускать?», «А на че означает 3-я строчка?»…
Потому что все эти вопросы сейчас роятся в моей голове (
Это всё есть здесь — nodejs.org
Можно прям последовательно всю страничку прочитать :)
Only those users with full accounts are able to leave comments. Log in, please.