Node.js — платформа для выполнения JavaScript на сервере на основе движка V8 от Google. В отличие от Apache с PHP, Node.js обрабатывает запросы в одном потоке через event loop без блокировки I/O. Это обеспечивает высокую производительность при многих одновременных соединениях.
Event Loop и неблокирующий I/O
Ключевое отличие от традиционных серверов: Node.js не создаёт отдельный поток или процесс на каждый запрос. Event loop обрабатывает тысячи соединений в одном потоке, передавая I/O-операции (запросы к БД, файловая система, сеть) библиотеке libuv для асинхронного выполнения. Пока I/O выполняется, event loop обрабатывает другие запросы.
Слабое место: CPU-intensive задачи (шифрование, обработка изображений) блокируют event loop и замедляют все остальные запросы. Для них используют Worker Threads (Node.js 10+) или очередь задач с отдельными worker-процессами.
Популярные фреймворки
- Express.js — минималистичный фреймворк, де-факто стандарт. npm: >30 млн загрузок/неделю.
- Fastify — быстрее Express на 20–40%, встроенная валидация через JSON Schema.
- NestJS — TypeScript, Angular-подобная архитектура, enterprise-решения.
- Next.js — SSR/SSG для React, файловый роутинг.
- Hapi.js — строгая валидация входных данных, популярен в финтехе.
Node.js в хостинге
На VPS Node.js-приложение запускают через PM2 (Process Manager 2) для автоматического перезапуска при сбое и управления кластером:
# Запуск приложения через PM2
pm2 start app.js --name myapp
pm2 startup # автозапуск при перезагрузке
pm2 save # сохранить список процессов
Перед Node.js ставят Nginx как reverse proxy для отдачи статики, SSL-терминации и балансировки нагрузки:
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
История
Node.js создан Райаном Далем (Ryan Dahl) и представлен на JSConf EU в ноябре 2009 года. Движок V8 взят из Google Chrome. В 2011 году npm (Node Package Manager) стал частью стандартной поставки. В 2014 году разработчики создали форк io.js из-за медленного развития, в 2015 году он воссоединился с Node.js в рамках Node.js Foundation. OpenJS Foundation основана в 2019 году. Node.js 18 (2022) — первая LTS-версия с V8 10.x и встроенным Fetch API.
На что обращать внимание
Node.js потребляет больше памяти, чем PHP на аналогичной нагрузке — minimum 256 МБ для простых приложений. На VPS с 1 ГБ RAM несколько Node.js-приложений требуют тщательного управления памятью. Docker упрощает изоляцию: каждое приложение в своём контейнере с лимитами --memory=256m. Для production всегда использовать LTS-версии Node.js — они поддерживаются 30 месяцев.
Сравнение с PHP
| Параметр | Node.js | PHP (FPM) |
|---|---|---|
| Модель | Асинхронный event loop | Синхронные процессы/воркеры |
| WebSocket | Нативно | Требует отдельного сервера |
| CPU-нагрузка | Блокирует event loop | Изолирован в воркере |
| Экосистема | npm: 2 млн+ пакетов | Composer/Packagist |