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

Wydano Node.js 21.0, platformę do uruchamiania aplikacji sieciowych w języku JavaScript. Oddział Node.js 21.0 będzie wspierany przez 6 miesięcy. W najbliższych dniach zakończy się stabilizacja gałęzi Node.js 20, która otrzyma status LTS i będzie wspierana do kwietnia 2026 roku. Utrzymanie dotychczasowej gałęzi LTS Node.js 18.0 potrwa do września 2025, a rok wcześniej ostatniej gałęzi LTS 16.0 do kwietnia 2024.

Główne ulepszenia:

  • Fetch API zostało uznane za stabilne, przeznaczone do ładowania zasobów przez sieć i upraszczające pisanie uniwersalnego kodu JavaScript odpowiedniego do pracy po stronie serwera i klienta. 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. Interfejs API zawiera metodę fetch() i obiekty Headers. Żądanie i odpowiedź reprezentujące nagłówki HTTP, żądanie i odpowiedź. const res = oczekiwanie na pobranie('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = czekaj na res.json(); konsola.log(dane); }
  • Ustabilizowano obsługę interfejsu API WebStreams, który zapewnia dostęp do strumieni danych odbieranych przez sieć. API umożliwia dodawanie własnych procedur obsługi, które pracują z danymi w miarę napływania informacji przez sieć, bez czekania na pobranie całego pliku. Obiekty dostępne w Node.js obejmują ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream i DecompressionStream.
  • Dodano eksperymentalną implementację klienta WebSocket, kompatybilnego z przeglądarkami. Aby włączyć obsługę protokołu WebSocket, dostępna jest flaga „--experimental-websocket”.
  • Dodano tryb eksperymentalny umożliwiający użycie domyślnej implementacji modułów JavaScript ESM (moduły ECMAScript, używane w modułach dla przeglądarek) zamiast CommonJS (specyficznego dla Node.js). Zmiana nie dotyczy modułów, których format jest jawnie zdefiniowany poprzez pole „type” w package.json, określony flagą „--input-type” lub jest oczywisty ze względu na rozszerzenie pliku (.mjs dla ESM, .cjs dla CommonJS). Jednakże moduły, które nie są jawnie zdefiniowane jako CommonJS (na przykład mają rozszerzenie „.js”), po włączeniu nowego trybu będą traktowane jako moduły ESM. Aby aktywować nowe ustawienia modułu, zaproponowano flagę „--experimental-default-type”.
  • Silnik V8 został zaktualizowany do wersji 11.8, zastosowanej w Chromium 118, która obsługuje teraz metodę ArrayBuffer.prototype.transfer, możliwość grupowania tablic (metoda groupBy) oraz instrukcje WebAssembly do przetwarzania stałych (i32.add, i32.sub, i32.mul, i64.add, i64.sub i i64.mul).
  • Zakończono obsługę procedury obsługi globalPreload na rzecz wywołań rejestracji i inicjowania w celu konfiguracji modułów.
  • Do funkcji fs.writeFile dodano opcję „flush”, która wymusza opróżnianie danych na dysk po każdej operacji zapisu.
  • Poprawiona wydajność kodu związanego z analizowaniem adresów URL, interfejsem API pobierania, strumieniami, węzłem: fs i HTTP.
  • Dodano obiekt globalnego nawigatora. Na przykład, aby uzyskać dane o liczbie rdzeni procesora, możesz użyć właściwości navigator.hardwareConcurrency.
  • W parametrze „-test” dodano obsługę masek globalnych umożliwiających wybór testów do uruchomienia (na przykład można określić „-test **/*.test.js.”).
  • Zaktualizowano dołączony menedżer pakietów npm 10.2.0 i parser llhttp 9.1.2.
  • Zakończono obsługę programu Visual Studio 2019 i wersji systemu macOS starszych niż 11.0.

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