LINUX.ORG.RU

Node.js: где лучше, а где лучше не


0

2

Людям, пользующимся или собирающимся попробовать node.js: как вы считаете, где его лучше использовать, а где лучше НЕ использовать?

Ибо теоретически можно где угодно, истории эпичных фэйлов особенно приветствуются.

Рассказы эрлангистов о бездушном устаревшем жаваскрипте тоже приветствуются ;)

★★★★☆

Я использую v8cgi, поскольку именно node.js мне не приглянулся.

* v8cgi проверял немного на нагрузке, сделал нормальную библиотеку шаблонов, MVC, все дела. Кучка сайтов уже крутится на нём.

* node.js попробовал ДО v8cgi, не понравилась «выпученная во все стороны» асинхронность, при отсутствии реальной асинхронности в яваскрипте. есть fastcgi но один на все запросы, нет нормальной возможности запустить в режиме cgi или 10(20,30) копий fastcgi.

По поводу асинхронности и ниток:
Опять же, green threads (сравните с green processes в erlang), то есть эмуляция параллелизма на одном ядре одного процессора внутри одного процесса. Обещают что «когда-нибудь» это станет реальным параллелизмом но я жутко сомневаюсь. До green processes (как в erlang, миллион виртуальных процессов на 8 реальных процессах на 8-ядерном компе) они никогда не дорастут (потому что идеология языка не позволит), а native threads убьют node.js - как только стартанёт для каждого cgi/fastcgi по 100 процессов.

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

> при отсутствии реальной асинхронности в яваскрипте

Парсер сломался, как это понимать?

green threads

green processess


никогда не дорастёт



Тоже парсится с большим трудом (что сказать то хотел?), но ведь не нужно же.

archimag ★★★
()
Ответ на: комментарий от archimag

что именно не нужно?

node.js по *заявленной* идее, если бы её реализовали, хорош был бы возможностью написать следующее:

sql(«запрос 1», когда будут поступать данные выполнить function())
sql(«запрос 2», когда будут поступать данные выполнить function())
считать_с_харда_данные(«файл», когда будут поступать данные выполнить function())

то есть выполняются sql,sql,считать_с_харда_данные, а function() выполняются «когда-то потом», когда придут данные, в последовательности поступления данных. может сперва файл считается, а может «запрос 2». и во время простоя, пока данные не пришли, может что-то ещё исполняться.

НО В NODE.JS ЭТО ЭМУЛИРУЕТСЯ, этого нет в реальности и врядли когда-то будет.

green threads - это «виртуальный параллелизм», читайте вики. то есть процесс эмулирует параллельность, по-очереди запуская функции внутри себя. поскольку по идеологии никогда(!) не будут исполняться две функции одновременно, то перейти от этого к параллелизму нельзя - нужны будут защёлки, не позволяющие функциям одновременно менять данные в одной и той же переменной, а этого идеология не позволяет.

native threads - это реальный параллелизм. один процесс=один процесс.

green processes - это erlang. нечто похожее на green threads, но с защелками, блекджеком и шлюхами. если копать вглубь то это *совсем* не green threads. потому и может выполняться параллельно и даже параллельно на кластере машин.

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

> green processes ... но с защелками

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

А если вфигачить их в язык, так и до blocking api добраться недалеко, всего один шаг: надо сказать что два вызова api не могут выполняться одновременно ;)

этого нет в реальности


а в чем «реальность»? Два гига, два ядра, четыре процесса одновременно, и эмуляция 100500 процессов поверх них любыми доступными способами.. есть еще какая-то реальность?

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от vahvarh

> что именно не нужно?

Все эти параллелизмы.

НО В NODE.JS ЭТО ЭМУЛИРУЕТСЯ, этого нет в реальности

и врядли когда-то будет.



Что-то я не врубляюсь, что значит эмулируется ? Это обычные callback, что тут можно эмулировать?

green threads

native threads


green processes


читайте вики



Спасибо, читать не буду, уже давно всё прочитал, нахрена вы об этом здесь рассказываете? Это же не вики.

archimag ★★★
()
Ответ на: комментарий от stevejobs

> Два гига, два ядра, четыре процесса одновременно, и эмуляция 100500 процессов поверх них любыми доступными способами.. есть еще какая-то реальность?
не видел этого на node.js, на erlang - видел. неужто сделали?

фреймворком, наверное, можно, но я бы, наверное, очковал пользоваться таким фреймворком.

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

запустить несколько процессов ноды (не важно где), и общаться между ними каким-нибудь memcached. Виртуализация ложится на ОС. Не? Медленно?

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

тогда какая разница - node это или v8cgi. а второму я доверяю больше. вот если бы нода запускала callback в виде green processes...

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

> тогда какая разница - node это или v8cgi

Полностью не блокирующий ввод/вывод и масса профита с этим связанная? Всякие параллелизмы только снижают производительность.

archimag ★★★
()
Ответ на: комментарий от stevejobs

Так и делают обычно. По процессу на ядро и сессии в редисе. Для стандартных вебовских задач. Чайлдовые процессы тоже можно лепить, но это реже надо.

Vit ★★★★★
()
Ответ на: комментарий от vahvarh

А разница, дружище, в том, что cgi по скорости сольет минимум в 2 раза. Такие у него гены.

Ваш КО

Vit ★★★★★
()
Ответ на: комментарий от vahvarh

НО В NODE.JS ЭТО ЭМУЛИРУЕТСЯ, этого нет в реальности и врядли когда-то будет.

Мне кажется, ты не знаешь матчасти.

baverman ★★★
()
Ответ на: комментарий от baverman

Забавно, но ведь Володя пока единственный в этом треде, кто аргументированно впрягся за эрланг и раскритиковал ноду ;)

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

кто аргументированно впрягся за эрланг

Слава яйцам в оппосте не был упомянут hunchentoot.

раскритиковал ноду

Увы, совсем не конструктивно.

baverman ★★★
()
Ответ на: комментарий от stevejobs

> аргументированно впрягся за эрланг

Вроде бы уже договорились, что сравнение Erlang и Node.js лишено практического смысла? То, что erlang-разработчики воспринимают успехи Node.js болезненно не означает, что Node.js и Erlang являются конкурентами.

archimag ★★★
()
Ответ на: комментарий от vahvarh

Поразите меня. Скажете, что это не пул интерпретаторов в памяти, как в пыхе, а постоянно работающее приложение, как в ноже.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Как в ноде, жабе, и куче других полноценных платформ приложений :)

Vit ★★★★★
()
Ответ на: комментарий от user_id_68054

$ php <?php if('0') { echo «в PHP это не случится\n»; } else { echo «вам кажется это логочно? тогда смотрите дальше...\n»; } if('00') { echo «PHP такой PHP :-D\n»; } ^D вам кажется это логочно? тогда смотрите дальше... PHP такой PHP :-D

А что, «00» — это число такое? Кто-то так пишет числа? У PHP свои правила приведения типов, их просто надо знать, если пишешь на нём. И они достаточно интуитивны.

Wizard_ ★★★★★
()
Ответ на: комментарий от vahvarh

Если там такой же fcgi как в пыхе -не нужен. Пруфы на доки, где написано что приложение в памяти висит. Или сольет в 2 раза :)

Ps. Суда по датам, fcgi там сырой и никакой.

Vit ★★★★★
()
Ответ на: комментарий от user_id_68054

>чем вам '0' нравится, а '00' нет? :-)

Тем, что «00» никто не пишет. Если возникла необходимость поставить два нуля для обозначения числа ноль, то это явно имелась в виду именно эта последовательность, которую можно представить в виде строки.

Wizard_ ★★★★★
()
Ответ на: комментарий от anonymous

>а я грешным делом подумал что с нуля восьмеричные числа начинаются...

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

Wizard_ ★★★★★
()

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

ixrws ★★★
()
Ответ на: комментарий от Vit

Всё таки вебjsсники часто имеют меньший уровень знаний, чем тот, что требуется разработчику ноды, если нужно писать свои либы или биндинги или что-либо ещё(например коннектится к уже написанному куску на жабе с помощью какого-нибудь json-rpc)

Одинаковых вряд ли, но доучить кого-то можно:)

ixrws ★★★
()
Ответ на: комментарий от stevejobs

>Ты еще скажи, что 1,100000000 - это не десятичная дробь -)

Если программист хочет получить ожидаемое поведение, то для этого существуют явные операции и явные (хорошо документированные) правила. Если программист пишет абы как, то в результате, вполне вероятно, получит какашку. У динамической типизации тоже есть свои преимущества, просто надо использовать технологии должным образом.

Wizard_ ★★★★★
()
Ответ на: Benchmark node.js vs v8cgi от anonymous

Извините, пользователь «four» не внёс меня в друзья, так что я не могу запостить в его журнал. Наверное, он боится.

Да, режим fastcgi течёт. Надо в ближайшее время отладить.
А вот 66 запросов за 30 секунд - это явно в режиме cgi. В режиме mod_v8cgi это уже 4716 на моей машине.
А node.js там вообще оттестирован в режиме standalone, значит даже на apache времени не тратится.

Так что это из разряда «давайте сравним ВАЗ 2107 и Мазератти Кватропорте - не знаю о чём думали дизайнеры Мазератти, даже два мешка картошки в багажник не влазит».

vahvarh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.