Dostępna platforma JavaScript Node.js 22.0.0

Wydano Node.js 22.0, platformę do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 22.0 klasyfikowany jest jako gałąź wsparcia długoterminowego, jednak status ten zostanie nadany dopiero w październiku, po ustabilizowaniu się. Node.js 22.x będzie obsługiwany do 30 kwietnia 2027 r. Utrzymanie dotychczasowej gałęzi LTS Node.js 20.x potrwa do kwietnia 2026, a rok wcześniej ostatniej gałęzi LTS 18.x do kwietnia 2025. Oddział testowy Node.js 21.x zostanie wycofany 1 czerwca 2024 r.

Główne ulepszenia:

  • Zaktualizowano silnik V8 do wersji 12.4, zastosowanej w Chromium 124. Wśród zmian w porównaniu do gałęzi Node.js 21, która korzystała z silnika V8 11.8) zauważono:
    • Obsługa rozszerzenia WasmGC, które upraszcza przenoszenie programów napisanych w językach programowania korzystających z modułu zbierającego elementy bezużyteczne (Kotlin, PHP, Java itp.) do WebAssembly. WasmGC dodaje nowe typy struktur i tablic, które mogą wykorzystywać nieliniową alokację pamięci.
    • Obsługa metody Array.fromAsync(), która asynchronicznie zwraca nową instancję obiektu Array skopiowaną z obiektu iterowalnego typu tablicowego, iterowalnego lub asynchronicznego.
    • Obsługa metod iteracyjnych, takich jak .map, .filter, .find, .take, .drop, .forEach i .reduce.
    • Obsługa obiektu Set, który definiuje zbiór wartości i oferuje metody realizujące typowe operacje na zbiorach, takie jak przecięcie, suma, różnica i dodawanie.
  • Kompilator JIT optymalizujący Maglev jest domyślnie włączony, a jego celem jest szybkie generowanie kodu maszynowego o wysokiej wydajności dla często używanego kodu JavaScript. Włączenie Maglev może znacznie przyspieszyć krótkotrwałe aplikacje CLI, które nie wykonują operacji długoterminowych, na przykład czas ukończenia testu Jetstrea zostaje skrócony o 7.5%, a testu prędkościomierza o 5%.
  • Praca ze strumieniami została przyspieszona poprzez zwiększenie wartości opcji highWaterMark z 16 KB na 65 KB (określa limit, do jakiego buforowane jest nagranie). Zmiana powoduje zwiększone zużycie pamięci, więc aplikacje zaprojektowane do działania z ograniczoną pamięcią RAM mogą wymagać przywrócenia starej wartości poprzez wywołanie metody setDefaultHighWaterMark().
  • Poprawiono wydajność funkcji API fetch() i modułu uruchamiania testów, zwiększając efektywność tworzenia instancji AbortSignal. Poprawiono wydajność API związanych z synchroniczną pracą z systemami plików.
  • Udostępniono eksperymentalną funkcję umożliwiającą wykorzystanie wywołania „require()” do ładowania modułów JavaScript ESM (modułów ECMAScript) w trybie synchronicznym. Moduły ESM są używane w przeglądarkach i zastępują moduły CommonJS specyficzne dla Node.js. Aby załadować za pomocą „require()”, moduł ESM musi zostać wykonany w trybie synchronicznym (bez oczekiwania na najwyższym poziomie). Obsługa jest włączana poprzez flagę „--experimental-require-module”.
  • Dodano eksperymentalną możliwość uruchamiania skryptów zdefiniowanych w pliku package.json za pomocą polecenia „--run”. "
  • Polecenie „node –watch” zostało przeniesione do kategorii stabilnej wraz z zaimplementowaniem trybu zegarka, który zapewnia ponowne uruchomienie procesu w przypadku zmiany zaimportowanego pliku (przykładowo, jeśli zostanie wykonane „node –watch indeks.js”, proces zostanie automatycznie uruchomiony ponownie po zmianie pliku Index.js).
  • Ustabilizowano natywną implementację interfejsu API WebSocket, umożliwiając korzystanie z protokołu WebSocket w trybie klienta bez instalowania dodatkowych zależności.
  • Dodano częściową obsługę interfejsu API Navigatora.
  • Interfejs API Webstreams dodał obsługę formatu kompresji deflate-raw.
  • Dodano funkcje glob i globSync do węzła: fsmodule w celu dopasowywania wzorców ścieżek plików.
  • Poprawiona obsługa niepoprawnie skonfigurowanych stosów IPv6. Zaimplementowano algorytm Happy Eyeballs umożliwiający szybkie przywrócenie ustawień w przypadku problemów z działaniem protokołu IPv6.
  • Interfejs API narzędzia jest przestarzały.
  • Zaktualizowane wersje zależności: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson do 3.8.0, ada 2.7.7 i undici 6.6.0 .

Platforma Node.js może być wykorzystywana zarówno do utrzymania serwerów aplikacji webowych, jak i do tworzenia zwykłych programów sieciowych typu klient i serwer. Dla rozszerzenia funkcjonalności aplikacji dla Node.js przygotowano duży zbiór modułów, w którym można znaleźć moduły z implementacją serwerów i klientów HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduły do ​​integracji z różnymi frameworkami webowymi, handlerami WebSocket i Ajax, konektorami DBMS (MySQL, PostgreSQL, SQLite, MongoDB), silnikami szablonów, silnikami CSS, implementacjami algorytmów kryptograficznych i systemów autoryzacji (OAuth), parserami XML.

Aby obsłużyć dużą liczbę równoległych żądań, Node.js wykorzystuje asynchroniczny model wykonywania kodu oparty na nieblokującym przetwarzaniu zdarzeń i definiowaniu procedur obsługi wywołań zwrotnych. Obsługiwane metody multipleksowania połączeń obejmują epoll, kqueue, /dev/poll i Select. Do multipleksowania połączeń wykorzystywana jest biblioteka libuv będąca dodatkiem do libev na systemach Unix oraz do IOCP na Windows. Biblioteka libeio służy do tworzenia puli wątków, a c-ares jest zintegrowany w celu wykonywania zapytań DNS w trybie nieblokującym. Wszystkie wywołania systemowe powodujące blokowanie są wykonywane w puli wątków, a następnie, podobnie jak procedury obsługi sygnałów, przekazują wynik swojej pracy z powrotem przez nienazwany potok.

Wykonanie kodu JavaScript zapewnia wykorzystanie silnika V8 opracowanego przez Google (dodatkowo Microsoft pracuje nad wersją Node.js z silnikiem Chakra-Core). W swojej istocie Node.js jest podobny do frameworków Perl AnyEvent, Ruby Event Machine, Python Twisted i implementacji zdarzeń w Tcl, ale pętla zdarzeń w Node.js jest ukryta przed programistą i przypomina przetwarzanie zdarzeń w aplikacji internetowej działa w przeglądarce.

Źródło: opennet.ru

Dodaj komentarz