Dostępna jest serwerowa platforma JavaScript Node.js 18.0

Wydano Node.js 18.0, platformę do uruchamiania aplikacji sieciowych w języku JavaScript. Node.js 18.0 został przypisany do gałęzi o długoterminowym wsparciu, ale status ten zostanie nadany dopiero w październiku po zakończeniu stabilizacji. Wsparcie dla Node.js 18.x będzie trwało do kwietnia 2025 roku. Wsparcie dla poprzedniej gałęzi LTS Node.js 16.x potrwa do kwietnia 2024 roku, a dla wcześniejszej LTS 14.x do kwietnia 2023 roku. Wsparcie dla gałęzi LTS 12.x zakończy się 30 kwietnia, a dla gałęzi pośredniej Node.js 17.x — 1 czerwca.

Zaimplementowano wywołania systemowe waitid (oczekiwanie na zmianę stanu procesu), pinsyscall (do przekazywania informacji o punkcie wejścia execve w celu ochrony przed exploitami ROP), getthrname i setthrname (uzyskiwanie i ustalanie nazwy wątku).

  • Silnik V8 został zaktualizowany do wersji 10.1, stosowanej w Chromium 101. W porównaniu z wydaniem Node.js 17.9.0 wprowadzono wsparcie dla nowych funkcji, takich jak metody findLast i findLastIndex do wyszukiwania elementów od końca tablicy oraz funkcje Intl.supportedValuesOf. Udoskonalono API Intl.Locale. Przyspieszono inicjalizację pól klas i prywatnych metod.
  • Domyślnie włączono eksperymentalne API fetch(), które służy do pobierania zasobów przez sieć. Implementacja opiera się na kodzie z klienta HTTP/1.1 undici i jest maksymalnie zbliżona do podobnego API udostępnianego w przeglądarkach. Umożliwia również wsparcie dla interfejsów FormData, Headers, Request i Response do manipulacji nagłówkami HTTP żądań i odpowiedzi. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Dodano eksperymentalną implementację API Web Streams, która zapewnia dostęp do strumieni danych pobieranych z sieci. API pozwala dodać własne przetworniki do pracy z danymi w trakcie ich odbioru z sieci, nie czekając na załadowanie całego pliku. W Node.js dostępne są teraz obiekty takie jak ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream i DecompressionStream.
  • Stabilna wersja API Blob, który umożliwia inkapsulację niezmiennych surowych danych do ich bezpiecznego wykorzystania w różnych wątkach roboczych, została wprowadzona.
  • Stabilna wersja API BroadcastChannel została włączona, co umożliwia asynchroniczną wymianę wiadomości w formacie „jeden nadawca — wielu odbiorców”.
  • Dodano eksperymentalny moduł node:test do tworzenia i uruchamiania testów w języku JavaScript, które zwracają wyniki w formacie TAP (Test Anything Protocol).
  • Umożliwiono tworzenie 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+. Z powodu problemów z kompilacją silnika V8 tymczasowo wstrzymano tworzenie 32-bitowych zestawów dla Windows.
  • Została wprowadzona eksperymentalna możliwość budowy pliku wykonywalnego Node.js z wybranymi przez użytkownika komponentami, inicjowanymi podczas uruchamiania. Aby określić komponenty startowe, do skryptu konfiguracyjnego dodano opcję "—node-snapshot-main", na przykład "./configure —node-snapshot-main=marked.js; name node".

Platforma Node.js może być wykorzystana zarówno do serwerowego wsparcia prac Web-aplikacji, jak i do tworzenia zwykłych klientskich oraz serwerowych programów sieciowych. Dla rozszerzenia funkcjonalności aplikacji do Node.js przygotowano dużą kolekcję modułów, w której można znaleźć moduły z realizacją serwerów 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, realizacje algorytmów kryptograficznych oraz systemów autoryzacji (OAuth), parsery XML.

Aby obsłużyć dużą liczbę równoległych zapytań, Node.js wykorzystuje asynchroniczny model uruchamiania kodu oparty na przetwarzaniu zdarzeń w trybie non-blocking oraz definiowaniu callbacków. Wsparcie dla multiplexing połączeń obejmuje takie metody jak epoll, kqueue, /dev/poll i select. Do multiplexing połączeń używana jest biblioteka libuv, która jest dodatkową warstwą nad libev w systemach Unix oraz nad IOCP w Windows. Do tworzenia puli wątków (thread pool) wykorzystana jest biblioteka libeio, a do wykonywania zapytań DNS w trybie non-blocking zintegrowano c-ares. Wszystkie wywołania systemowe, które powodują blokowanie, są realizowane w obrębie puli wątków, a następnie, podobnie jak obsługa sygnałów, przekazują wyniki swojej pracy z powrotem przez niestrunną rynnę (pipe). Wykonanie kodu JavaScript zapewnia stworzony przez firmę Google silnik V8 (dodatkowo Microsoft rozwija wersję Node.js z silnikiem Chakra-Core).

Zasadniczo Node.js przypomina frameworki Perl AnyEvent, Ruby Event Machine, Python Twisted oraz implementację zdarzeń w Tcl, ale pętla zdarzeń (event loop) w Node.js jest ukryta przed deweloperem i przypomina przetwarzanie zdarzeń w aplikacji webowej działającej w przeglądarce. Przy pisaniu aplikacji dla Node.js należy uwzględnić specyfikę programowania opartego na zdarzeniach, na przykład zamiast wykonywać „var result = db.query(„select..”);” z oczekiwaniem na zakończenie pracy i dalszą obróbką wyników, w Node.js stosuje się zasadę asynchronicznego wykonania, tj. kod przekształca się w „db.query(„select..”, function (result) {obróbka wyniku});”, przy czym kontrola natychmiast przechodzi do dalszego kodu, a wynik zapytania jest przetwarzany na bieżąco.

Ź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