Odbyła się wydanie Node.js 14.0,platformy do uruchamiania aplikacji sieciowych w JavaScript. Node.js 14.0 jest gałęzią wsparcia długoterminowego, jednak status ten zostanie nadany dopiero w październiku, po ustabilizowaniu się. Obsługiwana będzie wersja Node.js 14.0 być przeprowadzonym do kwietnia 2023 r. Utrzymanie dotychczasowej gałęzi LTS Node.js 12.0 potrwa do kwietnia 2022, a rok wcześniej ostatniej gałęzi LTS 10.0 do kwietnia 2021. Wsparcie dla gałęzi testowej 13.x zakończy się w czerwcu tego roku.
Ustabilizowano możliwość generowania w locie lub po wystąpieniu określonych zdarzeń raporty diagnostyczne, które wyświetlają zdarzenia pomagające diagnozować problemy, takie jak awarie, spadek wydajności, wycieki pamięci, duże obciążenie procesora, nieoczekiwane wyjście błędu itp.
Dodano eksperymentalną obsługę API Asynchroniczna pamięć lokalna z implementacją klasy AsyncLocalStorage, za pomocą której można utworzyć stan asynchroniczny z handlerami opartymi na wywołaniach zwrotnych i obietnicach. AsyncLocalStorage umożliwia przechowywanie danych podczas przetwarzania żądania internetowego, co przypomina lokalne przechowywanie wątków w innych językach.
Usunięto komunikat ostrzegawczy dotyczący funkcji eksperymentalnej podczas ładowania modułyECMAScript 6 połączone i wyeksportowane przy użyciu instrukcji importu i eksportu. Jednocześnie samo wdrożenie modułów ESM pozostaje eksperymentalne.
Silnik V8 zaktualizowany do wersji 8.1 (1, 2, 3), który obejmuje nowe optymalizacje wydajności i funkcje, takie jak nowy operator łączenia logicznego „?” (zwraca prawy operand, jeśli lewy operand ma wartość NULL lub jest niezdefiniowany i odwrotnie), operator „?” do jednorazowego sprawdzenia całego łańcucha właściwości lub wywołań (np. „db?.user?.name?.length” bez wstępnego sprawdzenia), metody Intl.DisplayName do uzyskania zlokalizowanych nazw itp.
Przeprowadzono rewizję Streams API, mającą na celu poprawę spójności Streams API i wyeliminowanie różnic w zachowaniu podstawowych części Node.js. Na przykład zachowanie http.OutgoingMessage jest zbliżone do stream.Writable, a net.Socket jest podobne do stream.Duplex. Opcja autoDestroy jest domyślnie ustawiona na „true”, co oznacza wywołanie „_destroy” po zakończeniu.
Dodano eksperymentalną obsługę API CZY BYŁEM (Interfejs systemu WebAssembly), udostępniając interfejsy programowe do bezpośredniej interakcji z systemem operacyjnym (POSIX API do pracy z plikami, gniazdami itp.).
Przypomnijmy, że platformę Node.js można wykorzystać zarówno do obsługi aplikacji webowych po stronie serwera, jak i do tworzenia zwykłych programów sieciowych klienckich i serwerowych. Aby rozszerzyć funkcjonalność aplikacji dla Node.js, duża liczba 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, konektory do DBMS (MySQL, PostgreSQL, SQLite , MongoDB ), silniki szablonów, silniki CSS, implementacje algorytmów kryptograficznych i systemów autoryzacji (OAuth), parsery 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. Biblioteka służy do multipleksowania połączeń libacja, który jest nadbudówką Libew w systemach Unix i przez IOCP w Windows. Biblioteka służy do tworzenia puli wątków libeio, do wykonywania zapytań DNS w trybie nieblokującym jest zintegrowany c-ares. 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 zastosowanie silnika opracowanego przez firmę Google V8 (Dodatkowo Microsoft pracuje nad wersją Node.js z silnikiem Chakra-Core).
W swojej istocie Node.js jest podobny do frameworków Perl AnyEvent, Rubinowa maszyna zdarzeń, Pyton przekręcony и realizacja zdarzenia w Tcl, natomiast pętla zdarzeń w Node.js jest ukryta przed programistą i przypomina obsługę zdarzeń w aplikacji internetowej działającej w przeglądarce. Pisząc aplikacje dla node.js, należy wziąć pod uwagę specyfikę programowania sterowanego zdarzeniami, zamiast np. robić „var wynik = db.query(„select..”);” w oczekiwaniu na zakończenie pracy i późniejszym przetwarzaniu wyników Node.js wykorzystuje zasadę wykonania asynchronicznego, tj. kod zostaje przekształcony do postaci „db.query(“select..”, funkcja (result) {przetwarzanie wyniku});”, w której kontrola zostanie natychmiast przekazana dalszemu kodowi, a wynik zapytania zostanie przetworzony w miarę nadejścia danych. .