Dostępna jest platforma JavaScript po stronie serwera Node.js 18.0

Wydano Node.js 18.0, platformę do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 18.0 klasyfikowany jest jako gałąź wsparcia długoterminowego, jednak status ten zostanie nadany dopiero w październiku, po ustabilizowaniu się. Node.js 18.x będzie wspierany do kwietnia 2025 roku. Utrzymanie dotychczasowej gałęzi LTS Node.js 16.x potrwa do kwietnia 2024 r., a rok wcześniej ostatniej gałęzi LTS 14.x do kwietnia 2023 r. Gałąź 12.x LTS zostanie wyłączona 30 kwietnia, a gałąź pomostowa Node.js 17.x zostanie wyłączona 1 czerwca.

Główne ulepszenia:

  • Silnik V8 został zaktualizowany do wersji 10.1, która jest używana w Chromium 101. W porównaniu do wersji 17.9.0 Node.js, dostępna jest teraz obsługa takich funkcji, jak metody findLast i findLastIndex do wyszukiwania elementów względem końca tablicę i funkcję Intl.supportedValuesOf. Ulepszone API Intl.Locale. Przyspieszono inicjalizację pól klas i metod prywatnych.
  • Domyślnie włączone jest eksperymentalne API fetch(), przeznaczone do ładowania zasobów przez sieć. Implementacja opiera się na kodzie z klienta undici HTTP/1.1 i jest jak najbardziej zbliżona do podobnego API udostępnianego w przeglądarkach. Obejmuje to obsługę interfejsów FormData, Headers, Request i Response w celu manipulowania nagłówkami żądań i odpowiedzi HTTP. const res = oczekiwanie na pobranie('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = czekaj na res.json(); konsola.log(dane); }
  • Dodano eksperymentalną implementację Web Streams API, zapewniającą dostęp do strumieni danych odbieranych przez sieć. Interfejs API umożliwia dodawanie własnych procedur obsługi do pracy z danymi w miarę napływania informacji przez sieć, bez czekania na pobranie całego pliku. Obiekty dostępne teraz w Node.js obejmują ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream i DecompressionStream.
  • Interfejs API obiektu Blob został przeniesiony do wersji stabilnej, co umożliwia hermetyzację niezmiennych, nieprzetworzonych danych w celu bezpiecznego użycia w różnych wątkach roboczych.
  • API BroadcastChannel zostało ustabilizowane, co pozwala organizować wymianę wiadomości w trybie asynchronicznym w formacie „jeden nadawca – wielu odbiorców”.
  • Dodano moduł eksperymentalny węzeł:test do tworzenia i uruchamiania testów w JavaScript, które zwracają wyniki w formacie TAP (Test Everything Protocol).
  • Zapewniona jest generacja gotowych zestawów dla Red Hat Enterprise Linux (RHEL) 8 i innych dystrybucji opartych na Glibc 2.28+, w tym Debian 10 i Ubuntu 20.04, a także dla macOS 10.15+. Ze względu na problemy z wersją silnika V8, tworzenie wersji 32-bitowych dla systemu Windows zostało tymczasowo wstrzymane.
  • Udostępniono eksperymentalną opcję budowania pliku wykonywalnego Node.js z komponentami wybranymi przez użytkownika, inicjowanymi podczas uruchamiania. Aby zdefiniować komponenty początkowe, do skryptu konfiguracyjnego konfiguracji dodano opcję „--node-snapshot-main”, na przykład „./configure —node-snapshot-main=marked.js; nazwij węzeł”

Platforma Node.js może być wykorzystywana zarówno do utrzymania serwerów aplikacji webowych, jak i do tworzenia zwykłych programów sieciowych typu klient i serwer. Dla rozszerzenia funkcjonalności aplikacji dla Node.js przygotowano duży 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, konektorami DBMS (MySQL, PostgreSQL, SQLite, MongoDB), silnikami szablonów, silnikami CSS, implementacjami algorytmów kryptograficznych i systemów autoryzacji (OAuth), parserami XML.

Aby zapewnić przetwarzanie dużej liczby równoległych żądań, Node.js wykorzystuje asynchroniczny model wykonywania kodu oparty na nieblokującej obsłudze zdarzeń i definicji procedur obsługi 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, która jest dodatkiem do libev w systemach Unix i IOCP w Windows. Biblioteka libeio służy do tworzenia puli wątków, a c-ares jest zintegrowany do wykonywania zapytań DNS w trybie nieblokującym. Wszystkie wywołania systemowe, które powodują blokowanie, są wykonywane wewnątrz puli wątków, a następnie, podobnie jak procedury obsługi sygnałów, przekazują wynik swojej pracy z powrotem przez nienazwany potok (pipe). Wykonanie kodu JavaScript zapewnia wykorzystanie silnika V8 opracowanego przez Google (dodatkowo Microsoft rozwija wersję 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

Dodaj komentarz