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

Nastąpiła premiera Node.js 20.0, platformy do uruchamiania aplikacji sieciowych w JavaScript. Node.js 20.0 został przypisany do długiej gałęzi wsparcia, ale status ten zostanie nadany dopiero w październiku, po stabilizacji. Node.js 20.x będzie obsługiwany do 30 kwietnia 2026 r. Konserwacja poprzedniej gałęzi Node.js 18.x LTS potrwa do kwietnia 2025 roku, a poprzedniej gałęzi 16.x LTS do września 2023 roku. Gałąź 14.x LTS zostanie wyłączona 30 kwietnia, a tymczasowa gałąź Node.js 19.x 1 czerwca.

Główne ulepszenia:

  • Silnik V8 został zaktualizowany do wersji 11.3, która jest używana w Chromium 113. Spośród zmian w porównaniu z gałęzią Node.js 19, która wykorzystywała silnik Chromium 107, funkcje String.prototype.isWellFormed i toWellFormed, Array.prototype i TypedArray.prototype do pracy z copy na zmianie obiektów Array i TypedArray, flaga „v” w RegExp, obsługa zmiany rozmiaru ArrayBuffer i zwiększania rozmiaru SharedArrayBuffer, wywołanie końcowe w WebAssembly.
  • Zaproponowano eksperymentalny mechanizm Permission Model, który pozwala ograniczyć dostęp do niektórych zasobów podczas wykonywania. Obsługa modelu uprawnień jest włączana przez określenie flagi „--experimental-permission” podczas uruchamiania. W początkowej implementacji zaproponowano opcje ograniczenia dostępu do zapisu (--allow-fs-write) i odczytu (--allow-fs-read) do niektórych części FS, procesów potomnych (--allow-child-process) , dodatki (--no-addons ) i wątki (--allow-worker). Na przykład, aby umożliwić zapis do katalogu /tmp i odczyt pliku /home/index.js, możesz określić: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indeks .js

    Aby sprawdzić dostęp, zaleca się użycie metody process.permission.has(), na przykład "process.permission.has('fs.write',"/tmp/test").

  • Programy obsługi modułów zewnętrznych ECMAScript (ESM) ładowane za pomocą opcji „--experimental-loader” są teraz wykonywane w osobnym wątku, odizolowanym od głównego wątku, co eliminuje przecinanie się kodu aplikacji i załadowanych modułów ESM. Podobnie jak w przeglądarkach, metoda import.meta.resolve() jest teraz wykonywana synchronicznie, gdy jest wywoływana z poziomu aplikacji. W jednej z kolejnych gałęzi Node.js planowane jest przeniesienie obsługi ładowania ESM do kategorii stabilnych funkcji.
  • Moduł node:test (test_runner), przeznaczony do tworzenia i uruchamiania testów JavaScript, które zwracają wyniki w formacie TAP (Test Anything Protocol), został przeniesiony do wersji stabilnej.
  • Utworzono oddzielny zespół ds. wydajności, który w ramach przygotowań do nowej gałęzi pracował nad przyspieszeniem różnych komponentów środowiska wykonawczego, w tym analizowania adresów URL, pobierania () i EventTarget. Na przykład, narzut związany z inicjowaniem obiektu EventTarget został zmniejszony o połowę, wydajność metody URL.canParse() została znacznie poprawiona, a wydajność liczników czasu została poprawiona. Ponadto w skład wchodzi wydanie wysokowydajnego parsera adresów URL - Ada 2.0, napisanego w C++.
  • Kontynuowano prace nad eksperymentalną funkcją dostarczania aplikacji w postaci pojedynczego pliku wykonywalnego (SEA, Single Executable Applications). Tworzenie pliku wykonywalnego wymaga teraz zastąpienia obiektu blob wygenerowanego z pliku konfiguracyjnego JSON (zamiast zastępowania pliku JavaScript).
  • Poprawiona kompatybilność Web Crypto API z implementacjami z innych projektów.
  • Dodano oficjalne wsparcie dla systemu Windows na systemach ARM64.
  • Ciągła obsługa rozszerzeń WASI (WebAssembly System Interface) do tworzenia samodzielnych aplikacji WebAssembly. Usunięto konieczność określania specjalnej flagi wiersza poleceń w celu włączenia obsługi WASI.

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