V8 Engine
-
Компилирует JavaScript в машинный код (вместо интерпретации).
-
Обеспечивает высокую производительность.
-
Разрабатывается Google (используется в Chrome).
LibUV
-
Библиотека для асинхронного I/O.
-
Реализует Event Loop и Thread Pool.
-
Поддерживает работу с файлами, сетью, таймерами и др.
Core Modules (Встроенные модули)
Node.js включает стандартные модули, доступные без установки:
-
fs
— работа с файловой системой. -
http
/https
— создание HTTP-серверов и клиентов. -
path
— управление путями файлов. -
events
— реализация EventEmitter. -
stream
— работа с потоками данных. -
crypto
— криптографические функции.
Event Loop (Цикл событий)
Основа асинхронности в Node.js. Работает по фазам:
-
Timers — выполнение
setTimeout
иsetInterval
. -
Pending callbacks — обработка системных событий (например, ошибки сети).
-
Idle, Prepare — внутренние фазы.
-
Poll — ожидание новых I/O-событий.
-
Check — выполнение
setImmediate
. -
Close callbacks — обработка закрытия (например,
socket.on('close')
).
Thread Pool (Пул потоков)
-
LibUV использует 4 потока (по умолчанию) для тяжелых операций (например,
fs.readFile
). -
Можно увеличить через
UV_THREADPOOL_SIZE
.
Node.js Bindings
-
Позволяют JavaScript взаимодействовать с C/C++ (например,
crypto
,zlib
).
NPM (Node Package Manager)
-
Менеджер пакетов для Node.js.
-
Устанавливает библиотеки в
node_modules
.
🔹 Архитектура Node.js (Single-Threaded + Event-Driven)
-
Однопоточность — основной поток (Event Loop) обрабатывает запросы.
-
Неблокирующий I/O — операции ввода-вывода выполняются асинхронно.
-
Масштабируемость — можно запускать несколько процессов через
cluster
.
🔹 Пример работы
const http = require('http'); const server = http.createServer((req, res) => { res.end('Hello, Node.js!'); }); server.listen(3000, () => { console.log('Server running on port 3000'); });
-
http.createServer использует модуль
http
(нативный). -
Event Loop ждёт HTTP-запросы.
-
При получении запроса — вызывается колбэк.
🔹 Плюсы Node.js
✅ Высокая производительность для I/O-задач.
✅ Большая экосистема (npm).
✅ Подходит для real-time приложений (WebSockets).
🔹 Минусы Node.js
❌ Не подходит для CPU-heavy задач (например, видеообработка).
❌ Callback Hell (решается через Promise
/async-await
).
🔹 Вывод
Node.js эффективен для сетевых приложений благодаря асинхронности и событийной модели. Его структура (V8 + LibUV + Event Loop) делает его быстрым и масштабируемым.