Издателството на Node.js 16.0, платформа за изпълнение на мрежови приложения на JavaScript, стана факт. Node.js 16.0 е в клоновете с дългосрочна поддръжка, но този статус ще бъде присвоен само през октомври, след стабилизация. Поддръжката на Node.js 16.0 ще се осъществява до април 2023 година. Поддръжката на предишния LTS клон Node.js 14.0 ще продължи до април 2023 година, а на предходния LTS клон 12.0 до април 2022 година. Поддръжката на LTS клона 10.0 ще бъде прекратена след 10 дни.
Основни подобрения:
- Двигателят V8 е обновен до версия 9.0 (в Node.js 15 беше използвана версия 8.6), което позволи в Node.js 16 да се реализират функции като свойството „indices“ за регулярни изрази (включва масив с начални и крайни позиции на групите от съвпадения), методът Atomics.waitAsync (асинхронна версия на Atomics.wait), поддръжка на ключовата дума await на най-високо ниво в модулите. Ускорено е извикването на функции, в ситуации, когато броят на предадените аргументи не съответства на определените параметри на функцията.
- Стабилизирано е API Timers Promises, което предоставя алтернативен набор функции за работа с таймери и връща Promise обекти, което позволява да се избегне използването на util.promisify(). import { setTimeout } from ‘timers/promises’; async function run() { await setTimeout(5000); console.log(‘Hello, World!’); } run();
- Добавена е експериментална реализация на API Web Crypto, предназначена за извършване на основни криптографски операции на страница на уеб приложения, като манипулации с криптографски хешове, генериране и проверка на цифрови подписи, кодиране и декодиране на данни с помощта на различни методи на криптиране, създаване на криптографски безопасни случайни числа. API включва и функции за генериране и управление на ключове.
- N-API (API за разработка на допълнения) е обновен до версия 8.
- Извършен е преходът към новата версия на пакетния мениджър NPM 7.10.
- Стабилизирана е реализацията на класа AbortController, основан на Web API AbortController и позволяваща отменяне на сигнали в избрани API на базата на Promise.
- Стабилизирана е поддръжката на третата версия на формата Source Map, използван за съпоставяне на генерирани, обработени или опаковани модули с оригиналния изходен код.
- За съвместимост с остарели Web API са добавени методите buffer.atob(data) и buffer.btoa(data).
- Започна е формирането на сборки за новите устройства на Apple, оборудвани с ARM чип M1.
- На платформата Linux изискванията към версията на компилатора са повишени до GCC 8.3.
Напомняме, че платформата Node.js може да се използва както за сървърно поддържане на Web приложения, така и за създаване на обикновени клиентски и сървърни мрежови програми. За разширяване на функционалността на приложенията за 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) {обработка на резултата});“, при който управлението бързо преминава към следващия код, а резултатът от запитването се обработва по мярка на постъпването на данните.
Допълнително може да се отбележи, че компанията Deno, основана от създателя на Node.js за развитието на платформата от ново поколение Deno, е получила 4.9 млн. долара инвестиции. По назначение Deno наподобява Node.js, но се опитва да отстрани концептуалните грешки, допуснати в архитектурата на Node.js, и да предостави на потребителите по-защитена среда. Подчертава се, че бизнес решенията на компанията Deno ще бъдат изградени на напълно отворени продукти, а моделът Open Core с отделяне на платени функции се възприема като неприемлив за платформата Deno.
Източник: opennet.ru
