Comments 29
Спасибо за комментарий. В целом в этой статье так же говорится что Node.js объективно превосходит PHP по производительности и даже в связке с Nginx, автор:
which is quite surprising as a matter of fact, Node.js can be faster than Nginx and Apache in some cases
и сам автор с пониманием говорит что Node.js — качественный продукт:
Since there are plenty of comparisons out there explaining and demonstrating Node.js raw speed over PHP (including PHP 7) I shall not elaborate further on the subject, Google it, I implore you.
Конечно можно найти много плюсов и минусов у Node.js, главное использовать его по назначению. В своей публикации, опираясь на собственный опыт, я хотел донести мысль о том что Node.js имеет место быть и способен справиться как с тривиальными так и высоконагруженными задачами и помочь разработчику разгрузить основной сервер. Надеюсь на понимание.

на самом деле нода очень быстрая на хелоу-вордах, но вся её скорость тает как только у нас появлябтся блокирующие IO, а они будут рано или поздно в любом проекте

Принцип разработки ноды — не использовать блокирующие IO. А места, где они всё-же требуются — выносить за ноду в том или ином виде (микросервис, другая мини-нода под чисто-эту-задачу, итд)

Никак не пойму эти попытки продвинуть node.js и выдать обертку над libev (которая в свою очередь обертка над демультиплексирующими системными вызовами вроде epoll в Linux) за революцию. Чем это принципиально отличается, например, от python gevent/twisted/etc? Складывается мнение, что у этих людей отсутствует системное мышление или их представления о мире ограничены JavaScript'ом. Ведь по сути, NodeJS — это libev + интерпретатор языка (v8 по дефолту).

Python + twisted — это более сложное решение, нежели Node.js. Зачем усложнять, если можно жить проще?
Спасибо за комментарий. У каждой tool есть своя задача, нет смысла сравнивать Python и Node.js. Вот например если бы вам необходимо было разработать продукт с трёхмерной графикой или со сложными математическими расчётами или проект-паук, врядли бы вы рассматривали Node.js, но если вам бы понадобилось сделать чат или какой-то продукт c активно меняющимся динамическим контентом, скорее всего вы бы посмотрели на Node.js и это логично и правильно, ведь не правильно отпираться от того факта что Node.js — технология стабильная, популярная и хорошо документированная, в отличии от EPOLL. Что касается V8 — спасибо ему за Node.js
У каждой tool есть своя задача, нет смысла сравнивать Python и Node.js.

Если так, зачем Вы тогда сравнивали PHP и NodeJs?
Моя цель была показать что на PHP или любом другом серверном языке программирования свет клином не сходится и есть хорошая альтернатива которую можно попробывать и использовать по надобности и по назначению
Читая статью у меня сложилось мнение, что Вы пытаетесь показать, что PHP — отстой, а NodeJS — это то, что следует использовать. Особенно учитывая то сравнение, где NodeJs невероятным образом рвет PHP по производительности.

К слову о тесте, у меня есть ощущение, что тестируется какая-то фигня, просто не верится, что разница на столько велика. А описания что делает тест (что замеряет и как с примерами исходников) Вы не предоставили. Просто красивые графики с потолка.

ps: если вы в тесет отдавали статику (что-угодно без CPU вычислений), то тест вообще ни о чем не говорит.
Не в коем случае, я сам PHP разработчик с опытом и никак не хочу сказать что PHP — это «отстой»
Что касается тестов скрипты были просты:
nodejs:
var sys = require('sys'),
    http = require('http');
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<p>Hello World</p>');
    res.end();
}).listen(8080);

php:
<?php
echo '<p>Hello World</p>';
Как зачем? Для драмы! Опять же, запуская под nginx мы получим тот же node, вид сбоку, с той же событийной архитектурой без бешеного context switching, который мы видим с Apache. Т.е. дело даже не в инструменте, а в умении его готовить.
Еще интересный вопрос: Сервер (apache+php / nodejs) и Тул для нагрузочного тестирования (jmeter?) у вас были запущены на одной физической машине?
Это, скорее всего, основная причина столь столь низких показателей связки apache+php.

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

Добавим к этому тот факт, что и у apache, и у php-fpm есть свои пулы потоков, по 1 потоку на каждого клиента. В результате вся нагрузка приходится на планировщик потоков.

В этой ситуации nodejs, у которого всего несколько потоков, будет показывать результаты лучше только потому, что во всей системе стало примерно в 3 раза меньше активных потоков.

И тут дело не в том, что nodejs крутая, тут дело в том, что сам эксперимент не является чистым; работа тестирующего тула вносит большую нелинейную погрешность в обоих случаях.

К тому же сам код для эксперимента был подобран не лучшим образом. В обоих случаях отдается статика, которая вообще никакой нагрузки не несет.

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

Тут и без замеров будет ясно, что nodejs будет показывать ошеломительные результаты.
К слову, если взять nginx и через него отдавать эту статику из кеша, результат будет еще лучше, чем у nodejs.
К слову о тесте, у меня есть ощущение, что тестируется какая-то фигня, просто не верится, что разница на столько велика.

Apache c дефолтными настройками никогда и не был тортом для больших нагрузок. Сравнение то идёт скорее с ним, а не с PHP. Спрячь ноду за тот же самый Apache и будет такая же скорость.

Node.js — технология стабильная, популярная и хорошо документированная, в отличии от EPOLL

epoll тоже стабилен, популярен и достаточно хорошо документирован. Но сравнивать epoll и node.js — это как сравнивать груши с галошами.
Думаю это стереотип, JS обрастая фреймворками стал сложноват для «нубов»
Спасибо за комментарий. Я указывал что публикация носит характер «tutorial» и могла бы быть полезна для тех кто ищет для себя технологию или решает что лучше использовать или просто подчеркнуть для себя чтто новое, так же можно поиграть с теми пару строчек кода которые имеются в публикации, они 100% рабочие.
Это ни разу не туториал, он ничему не учит. Это более чем поверхностный обзор. Если бы вы потрудились выполнить поиск по существующим на Хабре публикациям, то увидели бы, что тут есть масса и более полезной информации на тему Node.js.
Node.js технология популярная, конечно может быть очень много различной информации по ней, я ещё поработаю над свой публикацией и добавлю туда что-нибудь действительно интересное из практики. Спасибо за честную оценку. С удовольствием почитаю ваши публикации.
Данная публикация не несет никакой новой информации. Все уже есть либо здесь, на хабре, либо на доступных ресурсах в интернете.
простите, но это очень условно, информацию ищут и не для всех всё прозрачно и понятно, а по поводу что-то где-то найти, можно и man читать и интернет не нужен, спасибо
Only those users with full accounts are able to leave comments. Log in, please.