Ukazała się Node.js 19.0, platforma do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 19 to zwykła gałąź wsparcia z aktualizacjami dostępnymi do czerwca 2023 roku. W najbliższych dniach zakończy się stabilizacja gałęzi Node.js 18, która otrzyma status LTS i będzie wspierana do kwietnia 2025 roku. Utrzymanie dotychczasowej gałęzi LTS Node.js 16.0 potrwa do września 2023, a rok wcześniej ostatniej gałęzi LTS 14.0 do kwietnia 2023.
Główne ulepszenia:
- Zaktualizowano silnik V8 do wersji 10.7, zastosowanej w Chromium 107. Wśród zmian w silniku w stosunku do gałęzi Node.js 18 odnotowuje się implementację trzeciej wersji API Intl.NumberFormat, która dodaje nowe funkcje formatRange (), formatRangeToParts() iselectRange(), grupowanie zbiorów, nowe opcje zaokrąglania i ustawiania precyzji, możliwość interpretacji ciągów jako liczb dziesiętnych. Zaktualizowano także zawarte zależności llhttp 8.1.0 i npm 8.19.2.
- Zaproponowano eksperymentalną komendę „node -watch” z implementacją trybu oglądania, który zapewnia ponowne uruchomienie procesu po zmianie zaimportowanego pliku (na przykład, jeśli zostanie wykonane „node -watch indeks.js”, proces zostanie automatycznie uruchamiany ponownie po zmianie pliku Index.js).
- Obsługa mechanizmu Keep-Alive protokołu HTTP 1.1, który pozostawia połączenie otwarte przez określony czas w celu przetworzenia wielu żądań HTTP w ramach jednego połączenia, jest teraz włączona dla wszystkich wychodzących połączeń HTTP/HTTPS. Keep-Alive ma poprawić przepustowość i wydajność. Domyślny limit czasu podtrzymania połączenia wynosi 5 sekund. Do implementacji klienta HTTP dodano obsługę analizowania nagłówka HTTP Keep-Alive w odpowiedziach. serwer, a implementacja serwera HTTP Node.js została zaktualizowana w celu automatycznego rozłączania nieaktywnych klientów korzystających z opcji Keep-Alive.
- WebCrypto API zostało przeniesione do kategorii stabilnej, za wyjątkiem funkcji korzystających z algorytmów Ed25519, Ed448, X25519 i X448. Aby uzyskać dostęp do modułu WebCrypto, możesz teraz użyć globalThis.crypto lub require('node:crypto').webcrypto.
- Удалена поддержка инструментариев трассировки DTrace, SystemTap и ETW (Event Tracing for Windows), поддержание которых признано нецелесообразным из-за сложности сопровождения в актуальном виде при отсутствии должного плана их поддержки.
Platforma Node.js może być wykorzystywana zarówno do obsługi aplikacji webowych po stronie serwera, jak i do tworzenia standardowych programów sieciowych po stronie klienta i serwera. Aby rozszerzyć funkcjonalność aplikacji Node.js, przygotowano bogaty zbiór modułów, w tym te implementujące… serwery i klientów HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduły do integracji z różnymi frameworkami internetowymi, obsługi WebSocket i Ajax, łączniki do DBMS (MySQL, PostgreSQL, SQLite, MongoDB), silniki szablonów, silniki CSS, implementacje algorytmów kryptograficznych i systemów autoryzacji (OAuth), parsery XML.
Aby obsługiwać dużą liczbę równoległych żądań, Node.js wykorzystuje asynchroniczny model wykonywania kodu oparty na nieblokującym przetwarzaniu zdarzeń i obsłudze wywołań zwrotnych. Obsługiwane metody multipleksowania połączeń to epoll, kqueue, /dev/poll i select. Do multipleksowania połączeń używana jest biblioteka libuv, będąca rozszerzeniem biblioteki libev w systemach Unix oraz IOCP w systemie IOCP. WindowsBiblioteka libeio służy do tworzenia puli wątków, a c-ares jest zintegrowany z funkcją wykonywania zapytań DNS w trybie nieblokującym. Wszystkie blokujące wywołania systemowe są wykonywane w puli wątków, a następnie, podobnie jak procedury obsługi sygnałów, zwracają wyniki za pośrednictwem nienazwanego potoku. Wykonywanie kodu JavaScript jest obsługiwane przez silnik Google V8 (Microsoft opracowuje również wariant Node.js z silnikiem Chakra-Core).
W swej istocie Node.js jest podobny do platform Perl AnyEvent, Ruby Event Machine, Python Twisted i implementacji zdarzeń Tcl, ale pętla zdarzeń w Node.js jest ukryta przed programistą i przypomina obsługę zdarzeń w działającej aplikacji internetowej w przeglądarce. Pisząc aplikacje dla node.js, musisz wziąć pod uwagę specyfikę programowania sterowanego zdarzeniami, na przykład zamiast robić „var result = db.query("select..");" z oczekiwaniem na zakończenie pracy i późniejszym przetwarzaniem wyników Node.js wykorzystuje zasadę wykonania asynchronicznego, tj. kod jest przekształcany na "db.query("select..", function (result) {result processing});", w którym sterowanie natychmiast przejdzie do dalszego kodu, a wynik zapytania zostanie przetworzony w miarę napływu danych.
Źródło: opennet.ru
