Коротка відповідь
juniorJavaScript на front‑end — це мова, що виконується у браузері, працює з DOM і event loop, обробляє UI, наприклад `document.querySelector('.btn')`. На back‑end (Node.js) JS запускається на сервері, не має DOM, використовує I/O‑асинхронність через libuv і доступ до файлової системи, наприклад `fs.readFile('file.txt', cb)`. Різниця полягає в середовищі виконання, API і доступних модулях.
Повне пояснення
Що це і навіщо
- JavaScript – універсальна мова, що застосовується як у браузері (front‑end), так і на сервері (back‑end) через Node.js. Вона дозволяє створювати динамічні UI‑компоненти та обробляти серверну логіку.
Ключові принципи/терміни
- Event loop – цикл обробки подій, спільний для обох середовищ.
- DOM – Document Object Model, доступний лише у браузері.
- libuv – бібліотека Node.js для асинхронного I/O.
- Modules – ES‑modules у браузері, CommonJS/ESM у Node.js.
Як це працює
- У браузері код виконується в контексті window або worker, має доступ до document і API, таких як fetch.
- У Node.js код запускається в процесі V8‑рушія, має доступ до fs, net і інших серверних модулів.
Практика та реалізація
- Front‑end:
document.querySelector('.btn').addEventListener('click', () => console.log('clicked')); - Back‑end:
const fs = require('fs'); fs.readFile('data.json', 'utf8', (err, data) => { if (!err) console.log(JSON.parse(data)); });
Тестування
- Front‑end: Jest + Testing Library –
render(<Button />); fireEvent.click(screen.getByText('Submit')); expect(console.log).toHaveBeenCalled(); - Back‑end: Jest + Supertest –
request(app).get('/api').expect(200);
Безпека та приватність
- На front‑end обмежений доступ до файлової системи; безпечність забезпечується CORS, CSP.
- На back‑end слід обмежувати доступ до файлової системи через ролі, використовувати
process.envдля конфігурації.
Оптимізація
- Front‑end: мінімізувати кількість DOM‑операцій, використовувати requestAnimationFrame.
- Back‑end: пул з’єднань, кешування, асинхронні обробники.
Диагностика
- Front‑end: консоль браузера, DevTools → Network.
- Back‑end: логування через
console.logабо Winston, профілювання зnode --inspect.
Альтернативи
- Для front‑end: WebAssembly, TypeScript.
- Для back‑end: Deno, Go, Python – але JS через Node.js залишається найпоширенішим.
Часті помилки
- Виклик
documentу Node.js → ReferenceError. - Невірне використання
requireв ES‑module → SyntaxError. - Переповнення стеку через синхронні I/O у Node.js → блокування.
- Перевищення CORS‑політики при fetch → 403/401.
- Неправильне оброблення колбеків → callback hell.
- Відсутність
async/awaitу Node.js → неочікувані проміси. - Перевантаження DOM у front‑end → низька продуктивність.
- Неправильне налаштування
process.env→ витік конфіденційних даних.