Пуснат е Node.js 19.0, платформа за изпълнение на мрежови приложения на JavaScript. Node.js 19 е отнесен към клона с редовна поддръжка, а актуализациите за него ще се издават до юни 2023 г. В близките дни ще бъде завършена стабилизацията на клона Node.js 18, който ще получи статус LTS и ще се поддържа до април 2025 г. Поддръжката на предишната LTS версия Node.js 16.0 ще продължи до септември 2023 г., а на позапрошлата LTS версия 14.0 до април 2023 г.
Основни подобрения:
- Двигателят V8 е обновен до версия 10.7, използвана в Chromium 107. Сред промените в двигателя, в сравнение с клона Node.js 18, е реализирането на третата версия на API Intl.NumberFormat, в която са добавени нови функции formatRange(), formatRangeToParts() и selectRange(), групиране на множества, нови опции за закръгляне и задаване на точност, възможност за интерпретиране на низове като десетични числа. Също така са обновени включените зависимости llhttp 8.1.0 и npm 8.19.2.
- Предложена е експериментална команда „node —watch“ с реализация на режим на наблюдение, осигуряваща автоматично рестартиране на процеса при промяна на импортиран файл (например, при изпълнение на „node —watch index.js“ процесът ще бъде автоматично рестартиран при промяна на index.js).
- За всички изходящи HTTP/HTTPS връзки е включена поддръжка на механизма HTTP 1.1 Keep-Alive, който оставя връзката отворена за определено време за обработка на няколко HTTP заявки в рамките на едно съединение. Предполага се, че прилагането на Keep-Alive ще повиши пропускната способност и производителността. По подразбиране времето за задържане на връзката отворена е зададено на 5 секунди. В реализацията на HTTP клиента е добавена поддръжка за анализа на HTTP заглавката Keep-Alive в отговорите, сървъра в реализацията на HTTP сървъра Node.js е добавено автоматично отключване на неактивни клиенти, използващи Keep-Alive.
- API WebCrypto е преведен в стабилен статус, с изключение на функциите, използващи алгоритми Ed25519, Ed448, X25519 и X448. За достъп до модула WebCrypto вече можете да използвате globalThis.crypto или require(‘node:crypto’).webcrypto.
- Поддръжката на диагностичните инструменти DTrace, SystemTap и ETW (Event Tracing for Windows) е премахната, тъй като поддържането им е признато за нецелесъобразно поради сложността на актуализацията им без подходящ план за поддръжка.
Платформата Node.js може да се използва както за сървърно поддържане на уеб приложения, така и за създаване на обикновени клиентски и сървърни мрежови програми. За разширяване на функционалността на приложенията за Node.js е подготвена голяма колекция от модули, в която може да се намерят модули с реализация на сървъри и клиенти за HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули за интеграция с различни уеб фреймворкове, обработчици на WebSocket и Ajax, свързващи модули за СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизатори, CSS движки, реализации на криптоалгоритми и системи за удостоверяване (OAuth), XML парсери.
За да се осигури обработката на голям брой паралелни заявки, Node.js използва асинхронен модел на изпълнение на кода, основан на обработка на събития в неблокиращ режим и определяне на колбек обработчици. Поддържат се методи за мултиплексиране на съединения като epoll, kqueue, /dev/poll и select. За мултиплексиране на съединения се използва библиотеката libuv, която е надстройка над libev в Unix-системи и над IOCP в Windows. За създаване на пул от нишки (thread pool) се използва библиотеката libeio, а за извършване на DNS запитвания в неблокиращ режим е интегриран c-ares. Всички системни повиквания, които предизвикват блокиране, се изпълняват в пул от нишки и след това, подобно на обработчиците на сигнали, предават резултата от своята работа обратно чрез неназован канал (pipe). Изпълнението на JavaScript код се осигурява чрез използване на разработения от Google двигател V8 (допълнително, Microsoft развива вариант на Node.js с двигателя Chakra-Core).
По същество, Node.js е подобен на фреймворците Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацията на събития в Tcl, но цикълът на обработка на събития (event loop) в Node.js е скрит от разработчика и наподобява обработката на събития в уеб приложение, работещо в браузър. При написването на приложения за Node.js е необходимо да се вземе предвид спецификата на събитийно-ориентираното програмиране. Например, вместо да извършите „var result = db.query(„select..“);“ с изчакване за завършване и последваща обработка на резултатите, в Node.js се използва принципът на асинхронно изпълнение, т.е. кодът се трансформира в „db.query(„select..“, function (result) {обработка на резултата});“, при който управлението бързо преминава към следващия код, а резултатът от запитването се обработва по мярка на постъпването на данните.
Източник: opennet.ru
