Всем привет! Продолжение противостояния 2х языков.
Сегодня у нас будет более честное сравнение, которое отображает большинство реальных задач.
Итак, мы сегодня сравним PHP и Node.js по следующим признакам:
Важно! Ответы на вопросы и предъявы которые могут возникнуть:
Вопрос: А если запустить Node.js в кластере, будет ведь быстрее?
Ответ: На одно ядерном процессоре будет медленнее. (Проверено неоднократно)
Вопрос: А если в Node.js использовать для соединения с mysql пул коннектов, наверное отработает быстрее, из-за распараллеливания запросов?
Ответ: На одно ядерном процессоре будет медленнее. (Проверено неоднократно)
Вопрос: Надо чтобы код у ноды прогрелся, там же JIT как никак, тогда она будет работать быстрее?
Ответ: Само собой все прогрето и результаты взяты самые успешные.
Предъява: Да ты походу все подстроил, полюбому реальные результаты будут другие.
Ответ: Код тестов в открытом доступе на гитхабе, скопируй и убедись сам.
Предъява: ab надо запускать не на сервере на котором работают тестируемые бэкенды, а на другом компе.
Ответ: Разъяснять лень. Но если в 2х словах, то ab практически не отнимает ресурсов во время теста и дает более реальные цифры на которые способен именно твой сервак.
Конфигурация сервера:
Простой VDS — 1 ядро процессора 2ГГц, 1Гб оперативы, 10Гб SSD.
ОС: Debian 8.6.
Так же произведены базовые настройки ядра, чтобы сервер в принципе мог обрабатывать большое кол-во соединений.
Я нагенерировал данных в таблицу (100 записей).
Приступим.
Первый этап (одинарные запросы): из 10 одинарных запросов на каждого испытуемого выбираем среднее значение.
Node.js — Типичная динамическая страница

Node.js — REST API

PHP — Типичная динамическая страница

PHP — REST API

Как видим, разница по скорости генерации отличается в разы, и PHP этот раунд выигрывает.
Второй этап (нагрузочное тестирование):
Из 10 прогонов на каждого испытуемого выбираем среднее значение. Тут нас интересует сколько запросов в секунду способен обработать наш сервер. 3000 запросов в 1000 потоков. #ab -n 3000 -c 1000…
Node.js — Типичная динамическая страница

Node.js — REST API

PHP — Типичная динамическая страница

PHP — REST API

Динамическая страница — PHP быстрее почти в 2 раза (1.78 если быть точным)
REST API — PHP быстрее почти в 3,5 раза (3.32 если быть точным)
Ссылка на репозиторий с кодом для тестов
По поводу конфигов системы, пхп, Mysql
У меня настроено так, чтобы работало максимально быстро.
Если вы не знаете как должна быть настроена операционная система, php, nginx и mysql. Это не моя проблема.
Буду очень признателен, если вы напиши свои варианты реализации REST API для Node.js, чтобы результаты были более быстрыми чем у меня. И оставляйте код в комментах, я буду проводить замеры и писать результаты. Цель догнать, а лучше перегнать PHP.
По совету пользователя dos поменял в Node.js драйвер MySQL на github.com/mscdex/node-mariasql и результаты изменились кардинально!
Обновленные результаты по Node.js
Этап 1
Node.js — Типичная динамическая страница

Node.js — REST API

Этап 2
Node.js — Типичная динамическая страница

Node.js — REST API

Динамическая страница — Node.js быстрее в 1.16 раза(на 16%)
REST API — Node.js быстрее в 1.26 раза(на 26%)
Сегодня у нас будет более честное сравнение, которое отображает большинство реальных задач.
Итак, мы сегодня сравним PHP и Node.js по следующим признакам:
- Типичная динамическая страница
- REST API
Важно! Ответы на вопросы и предъявы которые могут возникнуть:
Вопрос: А если запустить Node.js в кластере, будет ведь быстрее?
Ответ: На одно ядерном процессоре будет медленнее. (Проверено неоднократно)
Вопрос: А если в Node.js использовать для соединения с mysql пул коннектов, наверное отработает быстрее, из-за распараллеливания запросов?
Ответ: На одно ядерном процессоре будет медленнее. (Проверено неоднократно)
Вопрос: Надо чтобы код у ноды прогрелся, там же JIT как никак, тогда она будет работать быстрее?
Ответ: Само собой все прогрето и результаты взяты самые успешные.
Предъява: Да ты походу все подстроил, полюбому реальные результаты будут другие.
Ответ: Код тестов в открытом доступе на гитхабе, скопируй и убедись сам.
Предъява: ab надо запускать не на сервере на котором работают тестируемые бэкенды, а на другом компе.
Ответ: Разъяснять лень. Но если в 2х словах, то ab практически не отнимает ресурсов во время теста и дает более реальные цифры на которые способен именно твой сервак.
Конфигурация сервера:
Простой VDS — 1 ядро процессора 2ГГц, 1Гб оперативы, 10Гб SSD.
ОС: Debian 8.6.
Так же произведены базовые настройки ядра, чтобы сервер в принципе мог обрабатывать большое кол-во соединений.
Я нагенерировал данных в таблицу (100 записей).
Приступим.
Первый этап (одинарные запросы): из 10 одинарных запросов на каждого испытуемого выбираем среднее значение.
Node.js — Типичная динамическая страница

Node.js — REST API

PHP — Типичная динамическая страница

PHP — REST API

Как видим, разница по скорости генерации отличается в разы, и PHP этот раунд выигрывает.
Второй этап (нагрузочное тестирование):
Из 10 прогонов на каждого испытуемого выбираем среднее значение. Тут нас интересует сколько запросов в секунду способен обработать наш сервер. 3000 запросов в 1000 потоков. #ab -n 3000 -c 1000…
Node.js — Типичная динамическая страница

Node.js — REST API

PHP — Типичная динамическая страница

PHP — REST API

Динамическая страница — PHP быстрее почти в 2 раза (1.78 если быть точным)
REST API — PHP быстрее почти в 3,5 раза (3.32 если быть точным)
Ссылка на репозиторий с кодом для тестов
По поводу конфигов системы, пхп, Mysql
У меня настроено так, чтобы работало максимально быстро.
Если вы не знаете как должна быть настроена операционная система, php, nginx и mysql. Это не моя проблема.
Буду очень признателен, если вы напиши свои варианты реализации REST API для Node.js, чтобы результаты были более быстрыми чем у меня. И оставляйте код в комментах, я буду проводить замеры и писать результаты. Цель догнать, а лучше перегнать PHP.
UPDATE
По совету пользователя dos поменял в Node.js драйвер MySQL на github.com/mscdex/node-mariasql и результаты изменились кардинально!
Обновленные результаты по Node.js
Этап 1
Node.js — Типичная динамическая страница

Node.js — REST API

Этап 2
Node.js — Типичная динамическая страница

Node.js — REST API

Динамическая страница — Node.js быстрее в 1.16 раза(на 16%)
REST API — Node.js быстрее в 1.26 раза(на 26%)
Only registered users can participate in poll. Log in, please.
В качестве бэкенда для своего будущего проекта я выберу
63.87% PHP 7373
36.13% Node.js211
584 users voted. 151 users abstained.