Comments 70
очень интересно смотреть, как js начинает применятся не только в качестве украшалки для web страниц, но как полноценный язык разработки. после знакомства с mooTools я познал, насколько js может быть мощным и что он не сильно уступает ruby.
+3
познакомившись с node, я понял, как прекрасен js без браузера…
+4
GWT уже давно это показал, что весь фронтенд может быть только на js :)
0
Сильно уступает, сильно… но не без плюсов, конечно.
0
я бы не сказал что сильно, большинство фичей и в javascript есть, таких как все классы это объекты, лямбды и т.д.
просто раньше (во всяком случае я сам) его не рассматривали серьезно за пределами браузера или скриптования в играх (и то редко).
просто раньше (во всяком случае я сам) его не рассматривали серьезно за пределами браузера или скриптования в играх (и то редко).
+1
Чего нет:
в языке
— Классическое наследование, mix-ins
— method_missing
— destructuring
— &:method
— потоки
— всё — объекты
в комьюнити
— Rails, Rack, Passenger
— DHH, Yehuda Katz
Могу по каждому пункту развернуть, почему это действительно нужно, и написать еще много чего))
В целом, преимуществ node.js два:
— скорость (да, V8 рулит)
— молодость (орентир на асинхронность дан изначально, нет legacy кода)
При этом сам язык менее мощный и выразительный, чем руби (см. выше). Зачем писать на менее мощном языке, при том, что производительность имеет тенденцию повышаться просто из-за следствий закона Мура, я не понимаю.
в языке
— Классическое наследование, mix-ins
— method_missing
— destructuring
— &:method
— потоки
— всё — объекты
в комьюнити
— Rails, Rack, Passenger
— DHH, Yehuda Katz
Могу по каждому пункту развернуть, почему это действительно нужно, и написать еще много чего))
В целом, преимуществ node.js два:
— скорость (да, V8 рулит)
— молодость (орентир на асинхронность дан изначально, нет legacy кода)
При этом сам язык менее мощный и выразительный, чем руби (см. выше). Зачем писать на менее мощном языке, при том, что производительность имеет тенденцию повышаться просто из-за следствий закона Мура, я не понимаю.
+1
— наследование — используйте любой каркас типа base2.
— разрушение объектов в языках со сборкой мусора — не дело.
— для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
— Yehuda Katz является контрибутором в такой проект, как jQuery Core.
А вообще это всё новое, поэтому каркасы ещё только начали создаваться. аналог Синатры уже есть.
— разрушение объектов в языках со сборкой мусора — не дело.
— для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
— Yehuda Katz является контрибутором в такой проект, как jQuery Core.
А вообще это всё новое, поэтому каркасы ещё только начали создаваться. аналог Синатры уже есть.
+4
> используйте любой каркас типа base2
Они кривы в мелочах.
> разрушение объектов в языках со сборкой мусора — не дело.
Вы не поняли. multi.rubyforge.org/text8.html
> для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
Согласен, что в этом классе приложений они не нужны. Тем не менее, я говорил о мощности языка и платформы вообще.
> Yehuda Katz является контрибутором в такой проект, как jQuery Core
и?
Они кривы в мелочах.
> разрушение объектов в языках со сборкой мусора — не дело.
Вы не поняли. multi.rubyforge.org/text8.html
> для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
Согласен, что в этом классе приложений они не нужны. Тем не менее, я говорил о мощности языка и платформы вообще.
> Yehuda Katz является контрибутором в такой проект, как jQuery Core
и?
0
Потоки вообще-то редко входят в основу языка, а обычно предоставляются библиотеками.
Доя Javascript уже есть стандартная библиотека www.whatwg.org/specs/web-workers/current-work/
Доя Javascript уже есть стандартная библиотека www.whatwg.org/specs/web-workers/current-work/
0
>> Yehuda Katz является контрибутором в такой проект, как jQuery Core
> и?
И, следовательно, он есть в нашем сообществе.
> Они кривы в мелочах.
Ничто не мешает поправить видимые вам мелочи самостоятельно.
Всё ведь написано на том же Javascript.
> и?
И, следовательно, он есть в нашем сообществе.
> Они кривы в мелочах.
Ничто не мешает поправить видимые вам мелочи самостоятельно.
Всё ведь написано на том же Javascript.
0
Кривости и-за ограниченности языка, а не из-за багов. Это не исправить.
Yehuda пишет server-side JS?
jQuery на node.js неприменима.
Yehuda пишет server-side JS?
jQuery на node.js неприменима.
0
Прежде чем говорить о неприменимости, стоило бы изучить вопрос.
github.com/tmpvar/jsdom/blob/master/example/jquery/run.js
Вы недостаточно изучили предметную область (хотя бы сам язык), а уже считаете себя правее остальных :)
github.com/tmpvar/jsdom/blob/master/example/jquery/run.js
Вы недостаточно изучили предметную область (хотя бы сам язык), а уже считаете себя правее остальных :)
+1
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). ПРавее остальных себя не считаю. Привык оперировать аргументами.
stackoverflow.com/questions/1801160/can-i-use-jquery-with-node-js
Это от автора jsdom.
По поводу моего незнания, вывод абсолютно нелогичен. И неверен, кстати (полтора года хардкорного JS). ПРавее остальных себя не считаю. Привык оперировать аргументами.
0
Речь в этой фразе о том, что часть 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/
Всё активно растёт в настоящее время.
И надо приложить ещё усилия, чтобы заработали многие другие части 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/
Всё активно растёт в настоящее время.
+1
движок от mozilla поддерживает Destructuring assignment и method_missing, может и v8 в будущем будет поддерживать
0
знаете, а ведь обилие фишек — это не всегда плюс. Достаточно вспомнить хотя бы те же С++ или Perl.
Я сам питонист, но был при ближайшем рассмотрении очарован простотой и элегантностью Javascript. Откровенно говоря, прототипирование мне даже показалось более логичным, нежели привычный ООП с классами. Хотя, конечно, есть и в JS неувязки и неоднозначности.
Я сам питонист, но был при ближайшем рассмотрении очарован простотой и элегантностью Javascript. Откровенно говоря, прототипирование мне даже показалось более логичным, нежели привычный ООП с классами. Хотя, конечно, есть и в JS неувязки и неоднозначности.
+4
Простотой — да, но некоторые языковые вещи на нем принципиально невозможны, ввиду отсутствия method_missing, например, или наличия примитивных типов.
+1
ну и что? а что вообще значит «невозможны»? Невозможно Жигуль разогнать до скорости Порше. А сайт собрать можно на любом языке.
Отсутствие какой-либо фишки не значит, что в принципе чего-то сделать нельзя из функционала, а просто значит «это нельзя сделать так, как мы привыкли это делать в любимом языке».
Отсутствие какой-либо фишки не значит, что в принципе чего-то сделать нельзя из функционала, а просто значит «это нельзя сделать так, как мы привыкли это делать в любимом языке».
+1
некоторые языковые вещи…
0
проблема вашей логики в том, что вы записываете в недостатки ДжаваСкрипта то, что он не такой как Руби. ДжаваСкрипт другой. Вот и все. И то, что в руби реализован какой-то синтаксический сахар не значит, что джаваскрипт плох из-за того, что в нем это реализуется другим способом.
+4
Джавакрипт не плох, просто он менее мощный ( в терминах Пола Грехама, www.paulgraham.com/avg.html ), чем руби.
+1
А сайт-то можно хоть на асме написать…
+1
В 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. А комьюнити дело времени =)
+1
> при вызове метода у примитива создается обертка-объект
Не во всех случаях.
10.times(function(){})
«preved».encode()
Mix-in — совсем не копирование методов. Сохраняется связь. Например, при добавлении метода в примешиваемый модуль он появится у всех объектов, с включенным этим модулем.
Не во всех случаях.
10.times(function(){})
«preved».encode()
Mix-in — совсем не копирование методов. Сохраняется связь. Например, при добавлении метода в примешиваемый модуль он появится у всех объектов, с включенным этим модулем.
0
10.times(function(){})
«preved».encode()
У number первая точка является отделением от дробной части числа, поэтому в случае с number нужно либо так: 10..times(function(){...}) либо так (10).times(function(){...}) (В спеке все описано). Про строку не понял. Достаточно добавить свой метод в прототип String и все работает. С mix-in верно, связи не будет, но не припомню случая, когда mix-in динамически менялся у меня.
«preved».encode()
У number первая точка является отделением от дробной части числа, поэтому в случае с number нужно либо так: 10..times(function(){...}) либо так (10).times(function(){...}) (В спеке все описано). Про строку не понял. Достаточно добавить свой метод в прототип String и все работает. С mix-in верно, связи не будет, но не припомню случая, когда mix-in динамически менялся у меня.
+1
Отличный фреймворк, хотя и немного отстаёт от выхода новых версий Node.
0
Кто-нибудь поделится опытом использования NodeJS в более-менее серьезных проектах? Интересно бы почитать плюсы, минусы…
+2
Я уже перевёл один из проектов с Синатры на node.js, полёт нормальный.
Пока не хватает асинхронного биндинга к mysql, хотя есть три проекта, которые планируют таковыми стать (node-libmysqlclient, node-libdrizzleclient).
Пока не хватает асинхронного биндинга к mysql, хотя есть три проекта, которые планируют таковыми стать (node-libmysqlclient, node-libdrizzleclient).
0
node-libdrizzleclient уже выложили в public? :-)
0
я просто не помнил имени. если точнее, речь об этой болванке — github.com/mme/my-nizzle
0
Ой, а вы не скажете, что там с производительностью, сколько примерно запросов в секунду на типичную страницу с контроллером/моделькой/шаблоном получается?
0
У меня задача не упиралась в производительность. Сейчас померил — чуть более 4000 запросов в секунду держит, но надо бы ещё померять старое.
0
Ну так это хорошо :) Жаль, в Javascript нет модулей, require_once, классов, наследования и *нативной* (не на яваскрипте) функции Object.extend(), e нас в PHP 50-100 запросов в секунду всего лишь :'(
-2
И железо примерно какое, скажите пожалуйста? Я ж теперь спать спокойно не могу, пока у кого то 4000 запросов в секунлу выполняется.
0
На этом железе много чего висит, помимо данной задачи,
Сейчас нагрузка выросла, скорость упала:
Requests per second: 3151.96 [#/sec] (mean)
Fedora Core 12 на Intel® Xeon(TM) CPU 2.80GHz
cat /etc/cpuinfo показывает 4 процессора по 1 ядру.
Сейчас нагрузка выросла, скорость упала:
Requests per second: 3151.96 [#/sec] (mean)
Fedora Core 12 на Intel® Xeon(TM) CPU 2.80GHz
cat /etc/cpuinfo показывает 4 процессора по 1 ядру.
0
У меня просто очень специфичная задача.
На более классической работе вполне проседает до 50 запросов в секунду.
К тому же node.js пока ещё в мастере не поддерживает префоркинг, что ограничивает производительность.
На более классической работе вполне проседает до 50 запросов в секунду.
К тому же node.js пока ещё в мастере не поддерживает префоркинг, что ограничивает производительность.
0
Интересно, почему в последнее время всё чаще упоминается Node.js, а Jaxer, напротив, упоминался лишь пару раз после выхода?
0
все экшены вы предлагаете пихать в один файл?
0
можно разделить на группы и подключать через require
0
это неудобно. сделайте роуты запросов в файлы
0
Это разные подходы.
Express — является клоном Sinatra (http://www.sinatrarb.com), идеального каркаса для маленьких приложений.
При желании можно использовать каркас, более близкий к Rails.
Их сейчас более 14, рекомендую посмотреть на Geddy или Bomber.
Кстати, wiki.github.com/ry/node/modules#web-frameworks-full
Express — является клоном Sinatra (http://www.sinatrarb.com), идеального каркаса для маленьких приложений.
При желании можно использовать каркас, более близкий к Rails.
Их сейчас более 14, рекомендую посмотреть на Geddy или Bomber.
Кстати, wiki.github.com/ry/node/modules#web-frameworks-full
+1
и когда приложение вырастает предлагаете всё нафиг переписывать?
зачем клонировать глупости, предназначенные лишь для «привет мир»?
зачем клонировать глупости, предназначенные лишь для «привет мир»?
0
Вы просто не знакомы с некоторыми идеями гибкого программирования.
Одна из важнейших идей — не писать ничего на вырост. Когда приспичит, дописать необходимое, и отрефакторить.
Одна из важнейших идей — не писать ничего на вырост. Когда приспичит, дописать необходимое, и отрефакторить.
+2
Это обычный подход для большинства приложений.
В тех же Rails маршруты обычно все прописываются в одном файле (config/routes.rb).
В тех же Rails маршруты обычно все прописываются в одном файле (config/routes.rb).
+1
это глупый подход, который усложняет приложение
-2
это как? вообще все? или как в Джанго — принято расщеплять на куски?
0
А не в курсе сколько памяти ест сервер?
Интересно в сравнении с пхп движками. Хостинг для пхп дешевый, порой для клиента это решающая роль.
Интересно в сравнении с пхп движками. Хостинг для пхп дешевый, порой для клиента это решающая роль.
0
Не могу сравнить, нет PHP на сервере :)
соберите и запустите пример у себя, это просто (configire, make, make install).
соберите и запустите пример у себя, это просто (configire, make, make install).
0
да я собрал запустил. При простое жрет 9мб. При нагрузках серьезных до 50 доходит. Сравнил с синатрой с запущенным одним монгрелом, у синатры 50мб, как без нагрузки так и с ней. Вот только с пхп не знаю как сравнивать) Там куча вариантов и не знаю как тестить)
0
При наличии idle time сервер node.js агрессивно запускает сборку мусора.
Так что потребление памяти будет плавать.
Так что потребление памяти будет плавать.
0
Сборщик мусора вообще порадовал. А то у всех остальных со временем бывает потребление памяти только растет.
Я вот теперь думаю если писать сайты js + mongodb например, то теперь можно будет клиентам предлагать сайты с дешевым vps 128 или даже 96мб памяти. А то писать на рельсах визитки или на других руби фреймворках выходит затратно.
Я вот теперь думаю если писать сайты js + mongodb например, то теперь можно будет клиентам предлагать сайты с дешевым vps 128 или даже 96мб памяти. А то писать на рельсах визитки или на других руби фреймворках выходит затратно.
0
Ребята! А напишите, пожалуйста, топик в духе «SSJS: первый HelloWorld» =] (гугл молчит)
Очень хочется попробовать написать какой-то на серверном JS, но боюсь дальше освоения Денвера я не ушел :(
Очень хочется попробовать написать какой-то на серверном JS, но боюсь дальше освоения Денвера я не ушел :(
0
Вот я потому и попросил написать топик, чтобы избежать в комментах вопросов: «А где его запускать?», «А на че означает 3-я строчка?»…
Потому что все эти вопросы сейчас роятся в моей голове (
Потому что все эти вопросы сейчас роятся в моей голове (
0
Это всё есть здесь — nodejs.org
Можно прям последовательно всю страничку прочитать :)
Можно прям последовательно всю страничку прочитать :)
0
Sign up to leave a comment.
Express — Sinatra для Node