Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке подія (event) у контексті Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Подія** - сигнал про те, що щось відбулося (прийшли дані, завершилося читання файлу, підключився клієнт); Node.js побудований навколо подієво-орієнтованої моделі, де код реагує на події через `EventEmitter`, замість того щоб блокуватися в очікуванні їх завершення. **Ключове:** усі асинхронні операції Node.js (файли, мережа, потоки, таймери) зрештою породжують подію, яку обробляє Event Loop.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 1. Що таке подія в Node.js > **Подія (event)** - це **сигнал про те, що щось відбулося** > (наприклад, прийшли дані, завершилося читання файлу, підключився клієнт тощо). Node.js побудований навколо **подієво-орієнтованої моделі (event-driven architecture)**, де код **реагує на події**, а не блокується в очікуванні їх завершення. ## 2. Механізм подій - EventEmitter В основі лежить клас `EventEmitter` із модуля `events`. Він дозволяє об'єктам: - **випромінювати події** (`emit`); - **слухати події** (`on`). Приклад: ```javascript const EventEmitter = require('events'); const emitter = new EventEmitter(); // Підписка на подію emitter.on('greet', (name) => { console.log(`Привіт, ${name}!`); }); // Генерація (emit) події emitter.emit('greet', 'Тім'); ``` Тут: - `'greet'` - це ім'я події, - `on` - слухач, - `emit` - генерація події, - викликається callback, переданий у `.on()`. ## 3. Як це пов'язано з I/O Node.js використовує події для всіх **асинхронних операцій**: - мережеві запити (`http`, `net`), - файлова система (`fs`), - потоки (`streams`), - таймери (`setTimeout`, `setInterval`). Наприклад: ```javascript const fs = require('fs'); const stream = fs.createReadStream('file.txt'); stream.on('data', chunk => console.log('Отримано chunk')); stream.on('end', () => console.log('Файл прочитано')); ``` Тут: - потік **генерує події** (`data`, `end`, `error`), - і ти **реагуєш на них**, а не чекаєш синхронного завершення. ## 4. Роль Event Loop Усі події обробляються через **Event Loop** - це "двигун", який: 1. слухає чергу подій; 2. викликає зареєстровані callback-и, коли подія відбувається; 3. ніколи не блокується (усе неблокуюче). Приклад життєвого циклу: ```javascript [Вхідні дані] → генерується подія → callback → обробка → наступний цикл ``` ## 5. Де зустрічаються події | Об'єкт | Типові події | |---|---| | `fs.ReadStream` | `data`, `end`, `error`, `close` | | `http.Server` | `request`, `connection`, `close` | | `net.Socket` | `connect`, `data`, `end`, `error` | | `process` | `exit`, `uncaughtException`, `SIGINT` | | `EventEmitter` | будь-які користувацькі (`'ready'`, `'updated'` тощо) | ## 6. Чому подієва модель ефективна - **Асинхронність без блокувань**: потік не чекає - події викликаються, коли готовий результат. - **Висока масштабованість**: можна обслуговувати тисячі з'єднань в одному потоці. - **Проста логіка реакцій**: замість циклу очікування - підписка на події. ## Підсумок > **Подія (event)** у Node.js - це сповіщення про те, що відбулася певна дія. > > Вона обробляється через механізм **EventEmitter**, а її виконання керується **Event Loop**. > > Уся асинхронність Node.js - файлові операції, HTTP, потоки, таймери - > будується на **подієвій моделі**, де код **реагує** на події, а не **чекає** їх завершення.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.