Что такое Node.js?
|
Node.js — JavaScript runtime вне браузера, построенный вокруг V8 и системных API. Он используется для servers, CLI, build tools и automation. Node предоставляет filesystem, processes и network APIs, которых нет в browser sandbox. |
Чем Node.js отличается от браузера?
|
В Node нет DOM, |
Что такое V8?
|
V8 — JavaScript engine от Chromium, который парсит, интерпретирует и JIT-компилирует код. Node использует V8 для выполнения ECMAScript. Browser APIs и Node APIs находятся вокруг engine, а не внутри языка. |
Что такое libuv?
|
libuv — библиотека Node для event loop, async I/O, timers, filesystem и thread pool. Она скрывает различия операционных систем. Не все операции выполняются на главном JavaScript thread. |
Почему Node.js называют event-driven runtime?
|
Программа регистрирует handlers, а runtime вызывает их при событиях I/O, timers или завершении задач. Это позволяет обслуживать много соединений без отдельного JavaScript thread на каждое. CPU-bound handler все равно блокирует event loop. |
Что такое event loop в Node.js?
|
Event loop проходит фазы timers, pending callbacks, poll, check и close callbacks, обрабатывая готовые задачи. Microtasks выполняются между соответствующими этапами. Детали важны при диагностике starvation и порядка callbacks. |
Чем event loop в Node.js отличается от browser event loop?
|
Оба координируют tasks и microtasks, но источники событий и фазы различаются. Browser привязан к rendering frames и Web APIs, Node — к libuv phases и server I/O. Нельзя механически переносить весь порядок callbacks между окружениями. |
Что такое CommonJS?
|
CommonJS — историческая module system Node с |
Что такое ES Modules в Node.js?
|
Это стандартная система |
Чем require отличается от import?
|
|
Что такое process.env?
|
Это объект environment variables текущего процесса. Значения являются строками или |
Что такое __dirname и почему его нет в ESM?
|
В CommonJS это directory текущего module file. ESM использует стандартный |
Что такое stream?
|
Stream обрабатывает данные частями вместо загрузки всего объема в память. Бывают readable, writable, duplex и transform streams. Backpressure предотвращает переполнение медленного consumer. |
Что такое Buffer?
|
|
Что такое child process?
|
Это отдельный процесс операционной системы, запущенный из Node через |
Что такое worker_threads?
|
Worker threads выполняют JavaScript параллельно внутри одного Node process с отдельными isolates. Они подходят для CPU-bound вычислений, а не обычного async I/O. Обмен сообщениями и shared memory добавляют overhead. |
Что такое npm package?
|
Это directory или опубликованный artifact с |
Что такое package.json?
|
Manifest проекта описывает metadata, scripts, dependencies, package exports и настройки tools. Он не фиксирует точное дерево transitive dependencies. Для этого нужен lock-файл. |
Чем dependencies отличаются от devDependencies?
|
|
Что такое peerDependencies?
|
Они объявляют, что package ожидает совместимую dependency от host-проекта. Это важно для frameworks и plugins, которым нужен общий runtime instance. Например, Angular library обычно указывает Angular как peer dependency. |
Что такое package-lock.json?
|
Lock-файл фиксирует точные версии и integrity всего установленного dependency tree. Он делает installs воспроизводимыми. Ручное редактирование обычно не требуется. |
Почему lock-файл важно коммитить?
|
CI и разработчики получают одно и то же разрешенное дерево, а изменения dependencies видны в review. Без lock-файла compatible ranges могут установить разные transitive versions. Это усложняет debugging и supply-chain audit. |
Что делает npm install?
|
Разрешает dependencies, устанавливает их в |
Что делает npm ci?
|
Удаляет существующий |
Чем npm ci лучше для CI?
|
Дает чистую, воспроизводимую установку и быстро обнаруживает незакоммиченный lock update. Поведение меньше зависит от
предыдущего workspace state. Кеш npm downloads можно использовать отдельно от |
Что такое npm scripts?
|
Это именованные shell-команды в поле |
Как npm scripts используются во frontend-проектах?
|
Для |
Что такое semantic versioning?
|
SemVer использует |
Что значит ^, ~ и exact version в package.json?
|
Exact устанавливает только указанную version. |
Почему frontend-проекту нужен Node.js?
|
Node запускает package manager, compiler, linter, tests, dev server и production build. Результат затем выполняется в browser и может не зависеть от Node. SSR-приложение дополнительно использует Node во время runtime. |
Как Node.js используется в Angular CLI?
|
CLI запускается как Node program, читает workspace config и вызывает builders. TypeScript/Angular compiler, dev server и test runner также работают в Node. Поддерживаемая Node version зависит от Angular version. |
Как Node.js используется в Vite/Webpack/esbuild?
|
Он запускает bundler process, читает файлы, разрешает modules и обслуживает plugins. Vite предоставляет dev server, Webpack строит module graph, esbuild выполняет быстрые transforms/bundling. Production output предназначен для browser или server target. |
Что такое dev server?
|
Локальный HTTP server для разработки с module transforms, source maps, watch и hot reload. Он оптимизирован для feedback, а не безопасности, кеширования и production traffic. Его нельзя использовать как production hosting. |
Чем dev server отличается от production build?
|
Dev server часто преобразует modules по запросу и хранит часть данных в памяти. Production build минифицирует, хеширует, оптимизирует и записывает deployable artifacts. Поведение окружения нужно проверять production build. |
Почему код, который работает в Node.js, может не работать в браузере?
|
Browser не предоставляет |
Почему код, который работает в браузере, может не работать в Node.js?
|
В Node обычно нет |
Что такое RPS?
|
RPS, или Requests Per Second, — количество запросов, которое сервер обрабатывает за секунду. Например, |
Что такое RPS monitor?
|
RPS monitor измеряет количество запросов за единицу времени. Он помогает увидеть текущую нагрузку, всплески трафика и связать их с деградацией производительности или доступности. |
Зачем frontend-разработчику понимать RPS?
|
Frontend-разработчик может работать с SSR, BFF, dev server, Node.js tooling и API-интеграциями. RPS помогает оценивать нагрузку на SSR, rate limits, кеширование, retry-логику и влияние frontend-кода на backend. |
Как может выглядеть простой RPS monitor в Node.js?
|
Этот учебный HTTP-сервер считает запросы за последнюю секунду и выводит результат в консоль: import http from 'node:http';
let requests = 0;
setInterval(() => {
console.log(`RPS: ${requests}`);
requests = 0;
}, 1000);
const server = http.createServer((request, response) => {
requests += 1;
response.writeHead(200, {'Content-Type': 'application/json'});
response.end(JSON.stringify({ok: true}));
});
server.listen(3000, () => {
console.log('Server started on http://localhost:3000');
}); |
Как проверить RPS monitor через curl?
|
После запуска сервера можно отправить несколько запросов вручную: curl http://localhost:3000
curl http://localhost:3000
curl http://localhost:3000В следующем секундном интервале сервер выведет количество полученных запросов. |
Почему такой RPS monitor не production-ready?
|
Он хранит счетчик только в памяти одного процесса и теряет данные при перезапуске. Несколько процессов или containers будут считать RPS независимо. В production метрики агрегируют через Prometheus, OpenTelemetry, APM или другую систему observability и визуализируют, например, в Grafana. |
Какие метрики кроме RPS важны для Node.js сервера?
Метрики полезно связывать между собой: один RPS не объясняет состояние системы. |
Чем RPS отличается от latency?
|
RPS показывает количество обработанных запросов в секунду, а latency — время обработки отдельного запроса. Высокий RPS сам по себе не является проблемой, но рост latency и error rate вместе с ним может указывать на перегрузку. |
Что такое p95 и p99 latency?
|
|
Как event loop delay связан с производительностью Node.js?
|
JavaScript выполняется в основном потоке Node.js. CPU-bound работа и долгие синхронные операции блокируют event loop, из-за чего callbacks и обработчики запросов запускаются позже. Event loop delay измеряет эту задержку и помогает найти такие блокировки. |
Что может увеличить RPS capacity Node.js приложения?
Изменения нужно подтверждать нагрузочными тестами: увеличение RPS не должно ухудшать latency и error rate сверх SLO. |