Dostępna jest serwerowa platforma JavaScript Node.js 19.0

Wydano Node.js w wersji 19.0, platformy do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 19 należy do gałęzi o standardowym okresie wsparcia, aktualizacje będą wydawane do czerwca 2023 roku. W najbliższych dniach zakończona zostanie stabilizacja gałęzi Node.js 18, która uzyska status LTS i będzie wspierana do kwietnia 2025 roku. Wsparcie dla poprzedniej gałęzi LTS Node.js 16.0 potrwa do września 2023 roku, a dla gałęzi 14.0 do kwietnia 2023 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 10.7, używanej w Chromium 107. Wśród zmian w silniku w porównaniu do gałęzi Node.js 18 wyróżnia się implementację trzeciej wersji API Intl.NumberFormat, w której dodano nowe funkcje formatRange(), formatRangeToParts() i selectRange(), grupowanie zbiorów, nowe opcje zaokrągleń i dokładności, oraz możliwość interpretacji ciągów jako liczb dziesiętnych. Zaktualizowano również dostarczane zależności llhttp 8.1.0 i npm 8.19.2.
  • Zaproponowano eksperymentalną komendę „node —watch” z zaimplementowanym trybem obserwacji, umożliwiającym ponowne uruchomienie procesu po zmianie importowanego pliku (na przykład, jeśli wykonasz „node —watch index.js”, proces zostanie automatycznie ponownie uruchomiony po zmianie index.js).
  • Dla wszystkich wychodzących połączeń HTTP/HTTPS włączono wsparcie dla mechanizmu HTTP 1.1 Keep-Alive, który utrzymuje połączenie przez pewien czas otwarte, aby obsłużyć kilka żądań HTTP w ramach jednego połączenia. Zakłada się, że zastosowanie Keep-Alive zwiększy przepustowość i wydajność. Domyślny czas oczekiwania na utrzymanie połączenia wynosi 5 sekund. Do realizacji klienta HTTP dodano wsparcie dla analizy nagłówka Keep-Alive w odpowiedziach, serwera, a w realizacji serwera HTTP Node.js dodano automatyczne odłączanie nieaktywnych klientów korzystających z Keep-Alive.
  • API WebCrypto zostało przeniesione do stabilnych, z wyjątkiem funkcji używających algorytmów Ed25519, Ed448, X25519 i X448. Do modułu WebCrypto można teraz uzyskać dostęp za pomocą globalThis.crypto lub require(‘node:crypto’).webcrypto.
  • Usunięto wsparcie dla narzędzi śledzenia DTrace, SystemTap i ETW (Event Tracing for Windows), ich wsparcie uznano za niecelowe z powodu trudności w utrzymaniu w aktualnym stanie bez odpowiedniego planu wsparcia.

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 non-blocking oraz definiowaniu callbacków. Wsparcie dla multiplexing połączeń obejmuje takie metody jak epoll, kqueue, /dev/poll i select. Do multiplexing połączeń używana jest biblioteka libuv, która jest dodatkową warstwą nad libev w systemach Unix oraz nad IOCP w Windows. Do tworzenia puli wątków (thread pool) wykorzystana jest biblioteka libeio, a do wykonywania zapytań DNS w trybie non-blocking zintegrowano c-ares. Wszystkie wywołania systemowe, które powodują blokowanie, są realizowane w obrębie puli wątków, a następnie, podobnie jak obsługa sygnałów, przekazują wyniki swojej pracy z powrotem przez niestrunną rynnę (pipe). Wykonanie kodu JavaScript zapewnia stworzony przez firmę Google silnik V8 (dodatkowo Microsoft rozwija wersję Node.js z silnikiem Chakra-Core).

Zasadniczo Node.js przypomina frameworki Perl AnyEvent, Ruby Event Machine, Python Twisted oraz implementację zdarzeń w Tcl, ale pętla zdarzeń (event loop) w Node.js jest ukryta przed deweloperem i przypomina przetwarzanie zdarzeń w aplikacji webowej działającej w przeglądarce. Przy pisaniu aplikacji dla Node.js należy uwzględnić specyfikę programowania opartego na zdarzeniach, na przykład zamiast wykonywać „var result = db.query(„select..”);” z oczekiwaniem na zakończenie pracy i dalszą obróbką wyników, w Node.js stosuje się zasadę asynchronicznego wykonania, tj. kod przekształca się w „db.query(„select..”, function (result) {obróbka wyniku});”, przy czym kontrola natychmiast przechodzi do dalszego kodu, a wynik zapytania jest przetwarzany na bieżąco.

Ź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