Як я відчуваю твій біль!
Як і багатьом, мені було важко дійти до суті Node.js, оскільки більшість людей пишуть / говорять лише про ту частину Node, яка їм здається корисною, - а частина, яка їм здається цікавою, зазвичай є другорядною перевагою Node, а не основною призначення. Потрібно сказати, що мені здається божевільним те, що люди кажуть, що Node - це просто середовище виконання JavaScript. Використання Node JavaScript - і вибір ним середовища виконання V8 - це просто засоби досягнення мети , найкращі інструменти для вирішення проблеми, яку розробники Node хотіли вирішити.
Основною метою Node було зробити управління подіями користувачів у веб-програмі більш ефективним. Тож Node в переважній більшостівикористовується на задній частині веб-програми. Управління подіями вимагає, щоб щось прослуховувалося на серверній машині для цих подій користувача. Отже, сервер http повинен бути налаштований для маршрутизації кожної події до відповідного сценарію обробника. Node забезпечує структуру для швидкого налаштування сервера для прослуховування на виділеному порту для запитів користувачів. Вузол використовує JavaScript для обробки подій, оскільки JavaScript має функції зворотного виклику: це дозволяє призупинити одне завдання до повернення результату залежного завдання. Не багато інших мов мають цю функцію, і ті, що мають, можуть не мати такого ефективного перекладача, як виконання Google V8. Більшість веб-розробників знають JavaScript, тому додаткове вивчення мови за допомогою Node не існує. Більше того, наявність функцій зворотного виклику дозволяє розміщувати всі завдання користувача в одному потоцібез явного блокування, застосованого до завдань, що вимагають доступу до бази даних або файлової системи. І саме це призводить до вищої ефективності виконання Node при інтенсивному одночасному використанні - головній меті його розвитку.
Щоб допомогти користувачам Node швидко писати зворотний кінцевий код, розробники Node також організували як вбудовану бібліотеку JS для рутинних завдань (наприклад, справи, пов'язані із запитами HTTP, кодування рядків (de), потоки тощо), так і репозитарій NPM (Node Package Manager) : це відкритий код, що підтримується користувачем, набору пакунків скриптів для різних стандартних та спеціальних функцій. Усі проекти Node дозволяють імпортувати пакети NPM у проект за допомогою встановленої команди встановлення npm .
Запити користувачів, які обробляються через Node, будуть необхідні веб-програмі, такі як автентифікація, запити до бази даних, управління вмістом (Strapi CMS) тощо. Усі ці дані будуть надіслані на порт Node. (Якщо аналіз даних, отриманих з бази даних, займає багато процесорного часу, цей тип процесу найкраще поставити в окремий потік, щоб він не сповільнював простіші запити користувачів.) Інші типи запитів користувачів, наприклад, для завантаження іншої веб-сторінки , завантаження файлів CSS / JS / зображень тощо, браузер продовжуватиме надсилати браузеру до портів за замовчуванням на серверній машині, де програма веб-сервера (Apache, NGinx та ін.) буде їх обробляти.
Отже, на практиці Node - це в основному структура для швидкого створення сервера та обробки подій, але така, що замінює лише деякі функції програми веб-сервера.
Інші випадки використання Node просто використовують ті чи інші його функції, наприклад движок V8. Наприклад, інструменти побудови інтерфейсу Grunt і Gulp використовують Node.js для обробки сценарію збірки, який можна закодувати для перетворення SASS в CSS, мінімізації файлів CSS / JS, оптимізації розміру / завантаження зображення тощо. Але такий вид роботи насправді просто використання Node побічним продуктом, а не основне його використання для створення ефективних внутрішніх процесів для веб-додатків.