Проверяет понимание различий между браузерным и серверным рантаймом JavaScript, что важно для выбора API и архитектуры приложений.
JavaScript сам по себе — это только язык и его синтаксис. Всё, что выходит за пределы стандарта ECMAScript (работа с DOM, файлами, сетью, таймерами), предоставляется средой исполнения. Браузер и Node.js — две разные среды, которые встраивают один и тот же движок (обычно V8), но добавляют к нему разные API и разный event loop.
В браузере глобальный объект — window (или self в воркерах). Через него доступны DOM, BOM, localStorage, fetch, XMLHttpRequest, setTimeout. В Node.js глобальный объект — global, а ключевые API — process, Buffer, модули fs, http, path, crypto. Например, document в Node.js не существует, а process.env недоступен в браузере.
Обе среды используют event loop, но реализуют его по-разному. В браузере цикл событий тесно связан с рендерингом: есть фазы задач (macrotasks), микрозадач (microtasks) и отрисовки кадра. В Node.js event loop имеет свои фазы: timers, pending callbacks, poll, check, close callbacks, а также process.nextTick и микрозадачи промисов. Это влияет на порядок выполнения кода и на то, когда выполняются колбэки.
В браузере модули подключаются через <script type="module"> или сборщики (Webpack, Vite). В Node.js исторически использовалась система CommonJS (require), сейчас поддерживается и ESM (import). Также Node.js имеет доступ к файловой системе и сети на уровне ОС, чего браузер лишён из соображений безопасности.
// Браузер
console.log(window.location.href);
document.querySelector('#app').textContent = 'Hello';
localStorage.setItem('token', 'abc');
// Node.js
const fs = require('fs');
console.log(process.env.NODE_ENV);
fs.readFile('./data.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
Один и тот же код на чистом JS (без DOM и Node API) будет работать в обеих средах. Но как только появляются document или fs, код становится привязан к конкретному рантайму.
Итог: браузерная среда ориентирована на взаимодействие с пользователем и страницей, Node.js — на серверные задачи, файлы и сеть. Понимание этих различий помогает писать изоморфный код, правильно выбирать библиотеки и не путать API при переносе логики между клиентом и сервером.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию