Dostępna jest 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 należy do gałęzi z długoterminowym wsparciem, lecz ten status zostanie przyznany dopiero w październiku, po przeprowadzeniu stabilizacji. Wsparcie dla Node.js 22.x będzie prowadzone do 30 kwietnia 2027 roku. Utrzymanie poprzedniej gałęzi LTS Node.js 20.x potrwa do kwietnia 2026 roku, a wcześniejszej gałęzi LTS 18.x do kwietnia 2025 roku. Utrzymanie pośredniej gałęzi Node.js 21.x zostanie zakończone 1 czerwca 2024 roku.

Zaimplementowano wywołania systemowe waitid (oczekiwanie na zmianę stanu procesu), pinsyscall (do przekazywania informacji o punkcie wejścia execve w celu ochrony przed exploitami ROP), getthrname i setthrname (uzyskiwanie i ustalanie nazwy wątku).

  • Silnik V8 został zaktualizowany do wersji 12.4, używanego w Chromium 124. Wśród zmian w porównaniu do gałęzi Node.js 21, w której używano silnika V8 11.8, wyróżnia się:
    • Wsparcie dla rozszerzenia WasmGC, które upraszcza portowanie programów do WebAssembly, napisanych w językach programowania korzystających z garbage collectora (Kotlin, PHP, Java itd.). WasmGC dodaje nowe typy struktur i tablic, dla których może być stosowane nieliniowe przydzielanie pamięci.
    • Wsparcie dla metody Array.fromAsync(), która w trybie asynchronicznym zwraca nowy egzemplarz obiektu Array, skopiowanego z obiektów przypominających tablice, które są iterowalne (iterable) lub asynchronicznie iterowalne (async iterable).
    • Wsparcie dla metod pracy z iteratorami, takich jak .map, .filter, .find, .take, .drop, .forEach i .reduce.
    • Wsparcie dla obiektu Set, który definiuje kolekcję wartości i oferuje metody do realizacji typowych operacji na zbiorach, takich jak przecięcia, unie, różnice i dopełnienia.
  • Domyślnie włączono optymalizujący kompilator JIT Maglev, który ma na celu szybką generację wysokowydajnego kodu maszynowego dla intensywnie używanego kodu JavaScript. Włączenie Maglev pozwala na zauważalne przyspieszenie działania krótkotrwałych aplikacji CLI, które nie wykonują długotrwałych operacji; na przykład czas trwania testu Jetstream skraca się o 7,5%, a testu Speedometer o 5%.
  • Przyspieszono pracę z potokami poprzez zwiększenie wartości opcji highWaterMark z 16 KB do 65 KB (określa limit, do którego wykonywana jest buforowanie zapisu). Zmiana ta powoduje zwiększenie zużycia pamięci, więc aplikacjom zaprojektowanym do pracy z ograniczoną ilością RAM, może być konieczne przywrócenie wcześniejszej wartości za pomocą wywołania setDefaultHighWaterMark().
  • Wydajność API fetch() i test runnera została zwiększona dzięki poprawie efektywności tworzenia instancji AbortSignal. Udoskonalono wydajność API związanych z synchroniczną pracą z systemami plików.
  • Wprowadzono eksperymentalną możliwość używania wywołania „require()” do ładowania modułów JavaScript ESM (ECMAScript Modules) 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ć moduł ESM przy użyciu „require()”, musi on być wykonywany w trybie synchronicznym (bez await na najwyższym poziomie). Obsługa jest włączana za pomocą flagi „—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 stabilnych z wdrożeniem trybu obserwacji, który zapewnia ponowne uruchamianie procesu w przypadku zmiany zaimportowanego pliku (na przykład podczas wykonania „node —watch index.js” proces zostanie automatycznie ponownie uruchomiony przy zmianie index.js).
  • Stabilizowano wbudowaną implementację API WebSocket, co umożliwia korzystanie z WebSocket w trybie klienta bez instalowania dodatkowych zależności.
  • Dodano częściową obsługę API Navigator.
  • W API Webstreams dodano wsparcie formatu kompresji deflate-raw.
  • W module node:fsmodule dodano funkcje glob i globSync do dopasowywania ścieżek plików według wzoru.
  • Udoskonalono obsługę niewłaściwie skonfigurowanych stosów IPv6. Zrealizowano algorytm Happy Eyeballs dla szybkiego powrotu w przypadku problemów z IPv6.
  • Ogłoszono dezaktualizację API util.
  • Zaktualizowano 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 oraz undici 6.6.0.

Platforma Node.js może być wykorzystana zarówno do serwerowego wsparcia prac Web-aplikacji, jak i do tworzenia zwykłych klientskich oraz serwerowych programów sieciowych. Dla rozszerzenia funkcjonalności aplikacji do Node.js przygotowano dużą kolekcję modułów, w której można znaleźć moduły z realizacją serwerów klientów HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduły do integracji z różnymi frameworkami webowymi, obsługiwacze WebSocket i Ajax, konektory do baz danych (MySQL, PostgreSQL, SQLite, MongoDB), silniki szablonów, silniki CSS, realizacje algorytmów kryptograficznych oraz systemów autoryzacji (OAuth), parsery XML.

Aby obsłużyć dużą liczbę równoległych żądań, Node.js wykorzystuje asynchroniczny model uruchamiania kodu, oparty na przetwarzaniu zdarzeń w trybie nieblokującym oraz definiowaniu callbacków. W ramach mnożenia połączeń wspierane są takie metody jak epoll, kqueue, /dev/poll i select. Do mnożenia połączeń używana jest biblioteka libuv, która jest nakładką na libev w systemach Unix oraz na IOCP w Windows. Do tworzenia puli wątków wykorzystana jest biblioteka libeio, a do wykonywania zapytań DNS w trybie nieblokującym zintegrowano c-ares. Wszystkie wywołania systemowe, które powodują blokowanie, są wykonywane wewnątrz puli wątków, a następnie, tak jak obsługa sygnałów, przekazują wyniki swojej pracy z powrotem przez bezimienny kanał (pipe).

Wykonanie kodu JavaScript zapewniane jest poprzez wykorzystanie silnika V8 opracowanego przez firmę Google (dodatkowo Microsoft rozwija wariant Node.js z silnikiem Chakra-Core). Zasadniczo Node.js przypomina frameworki Perl AnyEvent, Ruby Event Machine, Python Twisted oraz implementację zdarzeń w Tcl, jednak pętla przetwarzania zdarzeń (event loop) w Node.js jest ukryta przed programistą i przypomina przetwarzanie zdarzeń w aplikacji webowej działającej w przeglądarce.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster