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

Излязоха Node.js 18.0, платформа за изпълнение на мрежови приложения на JavaScript. Node.js 18.0 е отнесен към дългосрочните поддържани верси, но този статус ще бъде присъден само през октомври, след стабилизацията. Поддръжката на Node.js 18.x ще продължи до април 2025 година. Поддръжката на предишната LTS версия Node.js 16.x ще продължи до април 2024 година, а на версия 14.x до април 2023 година. Поддръжката на LTS версия 12.x ще бъде спряна на 30 април, а на междинната версия Node.js 17.x - на 1 юни.

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

  • Двигателят V8 е обновен до версия 10.1, използвана в Chromium 101. В сравнение с Node.js 17.9.0, новите възможности включват методите findLast и findLastIndex за намиране на елементи от края на масива, а също и функцията Intl.supportedValuesOf. Подобрено е API-то Intl.Locale. Инициализацията на полета в класове и частни методи е ускорена.
  • По подразбиране е включено експерименталното API fetch(), предназначено за извличане на ресурси през мрежата. Реализацията е основана на кода на HTTP/1.1 клиента undici и е максимално близка до аналогичното API, предоставяно в браузъри. Включена е поддръжка на интерфейсите FormData, 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 Web Streams, предоставящ достъп до потоци от данни, получени през мрежата. API-то позволява добавяне на собствени обработчици за работа с данни, докато информацията пристига, без да е необходимо да изчаквате зареждането на целия файл. В Node.js сега са налични обекти като ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream и DecompressionStream.
  • API Blob, който позволява инкапсулиране на неизменяеми сурови данни за безопасна употреба в различни работни потоци, е преведен в стабилна версия.
  • API BroadcastChannel, който позволява организиране на обмен на съобщения в асинхронен режим в стил „един изпращач - много получатели“, е преведен в стабилна версия.
  • Добавен е експериментален модул node:test за създаване и изпълнение на тестове на JavaScript, които връщат резултат в формат TAP (Test Anything Protocol).
  • Осигурено е създаването на подготвени версии за Red Hat Enterprise Linux (RHEL) 8 и други дистрибуции на базата на Glibc 2.28+, включително Debian 10 и Ubuntu 20.04, а също и за macOS 10.15+. Поради проблеми с изграждането на двигателя V8, временно е прекратено създаването на 32-битови версии за Windows.
  • Предоставена е експериментална възможност за изграждане на изпълним файл на Node.js с избрани от потребителя компоненти, инициализирани при стартиране. За определяне на стартиращите компоненти в скрипта за изграждане configure е добавена опция „—node-snapshot-main“, например, „./configure —node-snapshot-main=marked.js; name node“

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