Wydanie serwerowej platformy JavaScript Node.js 14.0

Zdarzyło się wydanie Node.js 14.0, platforma do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 14.0 należy do gałęzi z długoterminowym wsparciem, ale ten status zostanie przyznany dopiero w październiku po stabilizacji. Wsparcie dla Node.js 14.0 będzie realizowane do kwietnia 2023 roku. Obsługa poprzedniej wersji LTS Node.js 12.0 potrwa do kwietnia 2022 roku, a wcześniejszej wersji LTS 10.0 do kwietnia 2021 roku. Wsparcie dla wersji pośredniej 13.x zakończy się w czerwcu tego roku.

Podstawowe ulepszenia:

  • Została ustabilizowana możliwość generowania w locie lub w wyniku wystąpienia określonych zdarzeń raportów diagnostycznych, w których odzwierciedlane są zdarzenia pomagające w diagnostyce problemów takich jak awarie, spadki wydajności, wycieki pamięci, duże obciążenie CPU, nieprzewidziane wyjścia błędów itp.
  • Dodano eksperymentalne wsparcie dla interfejsu API Async Local Storage z implementacją klasy AsyncLocalStorage, która może być używana do tworzenia asynchronicznego stanu z obsługiwaczami opartymi na wywołaniach zwrotnych i obietnicach. AsyncLocalStorage pozwala przechowywać dane podczas przetwarzania żądania webowego, przypominając lokalne przechowywanie dla poszczególnych wątków (Thread-Local Storage) w innych językach.
  • Usunięto wyświetlanie ostrzeżenia o eksperymentalnej funkcjonalności podczas ładowania modułów ECMAScript 6 podłączanych i eksportowanych za pomocą wyrażeń import i export. Implementacja modułów ESM pozostaje jednak eksperymentalna.
  • Silnik V8 zaktualizowano do wersji 8.1 (1, 2, 3), w której wprowadzono nowe optymalizacje wydajności oraz dodano takie nowości, jak nowy operator logiczny łączenia „??” (zwraca prawy operand, jeśli lewy operand ma wartość NULL lub undefined, i odwrotnie), operator „?.” do jednoczesnej weryfikacji całego łańcucha właściwości lub wywołań (np. „db?.user?.name?.length” bez wcześniejszych sprawdzeń), metoda Intl.DisplayName do uzyskiwania zlokalizowanych nazw itp.
  • Przeprowadzono rewizję interfejsu API Streams, mającą na celu poprawę spójności interfejsów API Streams oraz eliminację różnic w zachowaniu podstawowych części Node.js. Na przykład, zachowanie http.OutgoingMessage zostało zbliżone do stream.Writable, a net.Socket do stream.Duplex. Opcja autoDestroy domyślnie ustawiona jest na „true”, co oznacza wywołanie „_destroy” po zakończeniu.
  • Dodano eksperymentalne wsparcie dla interfejsu API WASI (WebAssembly System Interface), zapewniającego interfejsy programistyczne do bezpośredniej interakcji z systemem operacyjnym (interfejsy API POSIX do pracy z plikami, gniazdami itp.).
  • Zwiększono wymagania dotyczące minimalnych wersji kompilatorów i platform: macOS 10.13 (High Sierra), GCC 6, Windows nowszego niż 7/2008R2.

Przypominamy, że platforma Node.js może być używana zarówno do serwerowego wsparcia działania aplikacji internetowych, jak i do tworzenia standardowych programów sieciowych dla klientów i serwerów. W celu rozszerzenia funkcjonalności aplikacji dla Node.js przygotowano dużą kolekcję modułów, w której 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, obsługiwacze WebSocket i Ajax, konektory do baz danych (MySQL, PostgreSQL, SQLite, MongoDB), silniki szablonów, silniki CSS, implementacje algorytmów kryptograficznych i systemów autoryzacji (OAuth), parsery XML.

Aby zapewnić obsługę dużej liczby równoległych zapytań, Node.js wykorzystuje asynchroniczny model uruchamiania kodu, oparty na obsłudze zdarzeń w trybie nieblokującym oraz definiowaniu funkcji callback. Metody multiplexowania połączeń obejmują takie mechanizmy jak epoll, kqueue, /dev/poll i select. Do multiplexowania 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 (thread pool) wykorzystywana jest biblioteka libeio, do wykonywania zapytań DNS w trybie nieblokującym zintegrowano c-ares. Wszystkie wywołania systemowe, które mogą wywoływać blokowanie, są wykonywane wewnątrz puli wątków i następnie, podobnie jak obsługa sygnałów, przekazują wynik swojej pracy z powrotem przez nieoznaczoną rurę (pipe). Wykonywanie kodu JavaScript zapewnione jest przez wykorzystanie zaprojektowanego przez Google silnika V8 (dodatkowo Microsoft rozwija wersję Node.js z silnikiem Chakra-Core).

Zasadniczo Node.js przypomina frameworki Perl AnyEvent, Ruby Event Machine, Python Twisted i wdrożenie zdarzeń w Tcl, ale 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. Podczas pisania aplikacji dla Node.js należy uwzględnić specyfikę programowania opartego na zdarzeniach, na przykład, zamiast wykonywania „var result = db.query(„select..”);” z oczekiwaniem na zakończenie pracy i późniejszą obsługą wyników, w Node.js stosuje się zasadę asynchronicznego wykonania, tj. kod przekształca się w „db.query(„select..”, function (result) {obsługa wyniku});”, przy czym kontrola natychmiast przechodzi do dalszego kodu, a wynik zapytania jest obsługiwany w miarę przybywania danych.

Ź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