Достъпна е сървърната JavaScript платформа Node.js 21.0

Пусна се Node.js 21.0, платформа за разработка на мрежови приложения с JavaScript. Поддръжката на версия 21.0 на Node.js ще продължи 6 месеца. През следващите дни ще приключи стабилизирането на версия 20 на Node.js, която ще получи статус LTS и ще се поддържа до април 2026 година. Поддръжката на предишната LTS версия Node.js 18.0 ще продължи до септември 2025 година, а на по-предишната LTS версия 16.0 до април 2024 година.

Основни подобрения:

  • Обявен е стабилен API Fetch, който е предназначен за зареждане на ресурси от мрежата и улеснява написването на универсален JavaScript код, който е подходящ за работа и на сървъра, и на клиента. Имплементацията е базирана на кода от HTTP/1.1 клиента undici и е максимално близка до аналогичния API, предоставян от браузерите. API включва метод fetch() и обекти Headers, Request и Response, представляващи HTTP заглавията, заявките и отговорите. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Стабилизирана е поддръжката на API WebStreams, която предоставя достъп до потоци от данни, получени от мрежата. API позволява добавянето на собствени обработващи функции, работещи с данни по време на получаването им от мрежата, без да чакат цялото файл да бъде заредено. В Node.js са налични обекти като ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream и DecompressionStream.
  • Добавена е експериментална реализация на клиента WebSocket, съвместима с браузерите. За включване на поддръжка на WebSocket е предвиден флаг "--experimental-websocket".
  • Добавен е експериментален режим по подразбиране за реализация на JavaScript модули ESM (ECMAScript Модули, използвани в модули за браузери) вместо CommonJS (специфичен за Node.js). Промяната не засяга модули, чийто формат е ясно определен чрез полето "type" в package.json, зададено чрез флага "--input-type" или очевидно поради разширението на файла (.mjs за ESM, .cjs за CommonJS). При това, модулите, които не са ясно определени като CommonJS (например, имат разширение ".js"), при включване на новия режим ще бъдат възприемани като ESM модули. За активиране на новите настройки на модулите е предложен флаг "--experimental-default-type".
  • Двигателят V8 е обновен до версия 11.8, използвана в Chromium 118, в който е внедрена поддръжка на метода ArrayBuffer.prototype.transfer, възможността за групиране на масиви (метод groupBy) и WebAssembly инструкции за обработка на константи (i32.add, i32.sub, i32.mul, i64.add, i64.sub и i64.mul).
  • Поддръжката на обработчика globalPreload е прекратена; вместо него за конфигуриране на модулите следва да се използват извикванията register и initialize.
  • В функцията fs.writeFile е добавена опция „flush“ за принудително изтласкване на данни на устройството след всяка операция запис.
  • Оптимизирана е производителността на кода, свързан с анализа на URL, API fetch, потоци, node:fs и HTTP.
  • Добавен е глобален обект navigator. Например, за получаване на данни за броя на ядрото на CPU можете да използвате свойството navigator.hardwareConcurrency.
  • В параметъра „—test“ е добавена поддръжка на glob-маски за избор на стартирани тестове (например, можете да зададете „—test **/*.test.js“).
  • Актуализирани са пакетният мениджър npm до версия 10.2.0 и парсерът llhttp до версия 9.1.2.
  • Поддръжката на Visual Studio 2019 и версии на macOS по-стари от 11.0 е прекратена.

Платформата 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster