o7412369815963
+ изначально асинхронный
Как на счет gevent, Twisted например? Когда это действительно нужно, а не всегда.
Лапша из inplace обработчиков асинхронных событий в JavaScript - одна их худших вещей, что могли “придумать” для читаемости кода.
Например:
app.get('/', function(req, res) {
var a = null;
some_object.some_method('my_param', function(err, result) {
if (err) {
sys.puts('Error');
return;
}
other_object.other_method(result, function(err, result2)){
if (err) {
sys.puts('Naive error');
return;
}
a = result2;
});
});
});
Нравится?
o7412369815963
+ на порядок быстрее
Быстрее Питона? Зависит от задачи. Распараллеливание (и асинхронность) эффективно вне зависимости от языка.
Я думаю, что сейчас использовать синтетические тесты и по ним оценивать язык уже нет смысла, т.к. на “поле брани” - в системах с огромным объемом данных узкими местами все равно остаются операции IO.
o7412369815963
+ полноценные анонимные ф-ии
И все та же лапша из многовложенного кода.
Возможностей лямбд не хватает?
o7412369815963
+ для веба, один язык для сервера и клиента (но пока не считаю это большим преимуществом)
Это чуть ли не единственный конек node.js.
Но только на первый взгляд.
Он призван уменьшить затраты на средних и больших проектах. Типа один язык разработки подразумевает более однородную среду разработки, однородную команду и тем самым снижает затраты на проект.
Но, тут не все так гладко.
Во-первых, те кто пишет для клиента и те, кто пишет для сервера - это разные люди. Как по знаниям и опыту, так и используемым технологиям.
Во-вторых, для оговоренных средних и больших проектов команды разработчиков сервера и клиента - разные команды. Таким образом их однородность существует только на бумаге.
Единственное, что приходит в голову полезного - это возможность карьерного роста разработчика из команды клиента в команду сервера. Это одна из перспектив, улучшающая отношение разработчика к работодателю. И работает она только один раз.
При этом, очевидно, переход из одной команды в другую не значит что новичек приживется или будет демонстрировать тот же уровень. Т.е. для проекта в целом это все таки лотерея.
О гибкости ничего сказать не могу, у меня опыта разработки на node.js, поэтому могу оценивать ее только как технологию в целом или отдельные архитектурные особенности.
Наверное, node.js хорош для стартаперов, т.к. позволяет маленькой команде сделать продукт на одной технологии, которую они оба:) знают. Но, если стартап взлетает, то тут начинают играть уже другие факторы, а менять уже что-либо уже поздно.
О построении страницы на стороне клиента.
Эта естественная возможность - еще одна фишка node.js, которую объявляют как преимущество.
Твиттер в прошлом году перешел как раз на использование такого подхода: страница генерируется блоками, которые вставляются и обрабатываются уже на клиенте. Цель перехода - оптимизация.
В этом году Твиттер отказался от такого подхода и вернулся к старой схеме - генерация страницы на сервере полностью. Причина возврата - просела производительность системы и старый подход позволяет добиться большей оптимизации.
На примере Твиттера заявленный подход генерации страницы на стороне клиента в качестве способа оптимизации и снижения нагрузки на сервера оказался неработоспособным!
В общем, любой инструмент хорошо использовать по назначению,- исходя из требований проекта.