Wydano Node.js 25.0.0, platformę do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 25.0 należy do gałęzi pośrednich, które będą wspierane przez 7 miesięcy (do czerwca 2026 roku). W najbliższych dniach zakończy się stabilizacja gałęzi Node.js 24, która pod koniec października uzyska status LTS i będzie wspierana do kwietnia 2028 roku. Wsparcie dla poprzednich gałęzi LTS Node.js 22.x i 20.x potrwa do kwietnia 2027 i 2026 roku odpowiednio.
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 zaktualizowano do wersji 14.1, stosowanej w Chromium 141. W porównaniu do poprzedniej wersji Node.js, odnotowano znaczne poprawy wydajności metody JSON.stringify, optymalizację WebAssembly i JIT, oraz wprowadzenie metod do konwertowania pomiędzy Uint8Array a danymi w formacie base64 lub szesnastkowym.
- Do mechanizmu Permission Model, który pozwala na ograniczenie dostępu do określonych zasobów w trakcie wykonywania, dodano opcję „—allow-net” dla zapewnienia dostępu do sieci (jeśli opcja „—allow-net” nie jest wskazana, uruchomienie Node.js w trybie „—permission” zakończy się błędem ERR_ACCESS_DENIED przy próbie wykonania operacji sieciowych).
- Włączone domyślnie kompatybilny z przeglądarkami API Web Storage, przeznaczone do trwałego (klasa localStorage) lub tymczasowego (klasa sessionStorage) przechowywania danych w formacie klucz/wartość. Z API Web Storage usunięto oznaczenie eksperymentalnego rozwoju.
- Klasa ErrorEvent, dostarczająca kompatybilny z przeglądarkami interfejs do obsługi zdarzeń zawierających informacje o błędach, została przeniesiona do kategorii globalnie dostępnych (można używać bez jawnego importu).
- Dla WebAssembly włączono wsparcie dla API JSPI (JavaScript Promise Integration), umożliwiającego dostęp do asynchronicznych API Web z sekwencyjnie wykonywanego kodu skompilowanego w WebAssembly.
- Dodano opcję „NODE_COMPILE_CACHE_RELATIVE_PATH” dla przenośnej pracy z pamięcią podręczną skompilowanych obiektów. W tym trybie hashe do identyfikacji obiektów obliczane są przy użyciu względnych ścieżek do plików, co umożliwia przenoszenie i osadzanie zawartości katalogu z kodem razem z pamięcią podręczną.
- Dodano możliwość profilowania obciążenia CPU.
- Menadżer pakietów NPM zaktualizowano do wersji 11.6.2.
- Dodano wsparcie dla Pythona 3.14.
- Minimalnie wspierane wersje to Clang 19 i Xcode 16.4.
- Wsparcie dla obiektu SlowBuffer zostało zakończone, wcześniej uznane za przestarzałe z powodu potencjalnych problemów z bezpieczeństwem. Zamiast SlowBuffer należy używać metody Buffer.allocUnsafeSlow().
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 zapytań, Node.js wykorzystuje asynchroniczny model uruchamiania kodu oparty na przetwarzaniu zdarzeń w trybie nieblokującym oraz określaniu callbacków. Metody multiplikacji połączeń obejmują takie metody jak epoll, kqueue, /dev/poll i select. Do multiplikacji połączeń używana jest biblioteka libuv, która jest nadbudową nad libev w systemach Unix i nad IOCP w Windows. Do tworzenia puli wątków używana jest biblioteka libeio, a do wykonywania zapytań DNS w trybie nieblokującym zintegrowano c-ares. Wszystkie wywołania systemowe, które powodują blokady, są wykonywane wewnątrz puli wątków, a następnie, podobnie jak obsługiwacze sygnałów, przesyłają wyniki swojej pracy z powrotem przez nieoznaczony 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
