Dostępna jest serwerowa platforma JavaScript Node.js 21.0

Wydano Node.js 21.0, platformę do uruchamiania aplikacji sieciowych w JavaScript. Wsparcie dla wersji Node.js 21.0 będzie trwało przez 6 miesięcy. W najbliższych dniach zakończona zostanie stabilizacja wersji Node.js 20, która otrzyma status LTS i będzie wspierana do kwietnia 2026 r. Wsparcie dla poprzedniej wersji LTS Node.js 18.0 potrwa do września 2025 r., a dla wersji 16.0 do kwietnia 2024 r.

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).

  • Ogłoszono stabilne API Fetch, które ma na celu pobieranie zasobów przez sieć i ułatwia pisanie uniwersalnego kodu JavaScript, nadającego się do działania po stronie serwera i klienta. Implementacja oparta jest na kodzie klienta HTTP/1.1 undici i jest jak najbardziej zbliżona do analogicznego API oferowanego w przeglądarkach. API zawiera metodę fetch() oraz obiekty Headers, Request i Response, reprezentujące nagłówki HTTP, żądanie i odpowiedź. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Z Stabilizowano wsparcie API WebStreams, które umożliwia dostęp do strumieni danych pobranych przez sieć. API pozwala na dodawanie własnych handlerów, które działają z danymi w miarę ich przychodzenia, nie czekając na pełne załadowanie pliku. W Node.js dostępne są takie obiekty jak ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream i DecompressionStream.
  • Dodano eksperymentalną implementację klienta WebSocket, kompatybilną z przeglądarkami. Aby włączyć wsparcie dla WebSocket, przewidziano flagę „—experimental-websocket”.
  • Dodano eksperymentalny tryb domyślny dla implementacji modułów JavaScript ESM (ECMAScript Modules, stosowanych w modułach dla przeglądarek) zamiast CommonJS (specyficznego dla Node.js). Zmiana nie wpływa na moduły, których format jest wyraźnie określony przez pole „type” w package.json, zadane przez flagę „—input-type” lub oczywiste ze względu na rozszerzenie pliku (.mjs dla ESM, .cjs dla CommonJS). W tym przypadku moduły, które nie są wyraźnie określone 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łów, zaproponowano flagę „—experimental-default-type”.
  • Silnik V8 został zaktualizowany do wersji 11.8, używanej w Chromium 118, w której wprowadzono wsparcie dla metody ArrayBuffer.prototype.transfer, możliwości grupowania tablic (metoda groupBy) oraz instrukcji WebAssembly do obsługi stałych (i32.add, i32.sub, i32.mul, i64.add, i64.sub i i64.mul).
  • Wsparcie dla globalPreload zostało zakończone, zamiast tego do konfiguracji modułów należy używać wywołań register i initialize.
  • Do funkcji fs.writeFile dodano opcję „flush”, która wymusza zapis danych na nośnik po każdej operacji zapisu.
  • Zwiększona wydajność kodu związanym z analizą URL, API fetch, strumieniami, node:fs oraz HTTP.
  • Dodano globalny obiekt navigator. Na przykład, aby uzyskać dane o liczbie rdzeni CPU, można użyć właściwości navigator.hardwareConcurrency.
  • W parametrze „--test” dodano wsparcie dla wzorców glob do wyboru uruchamianych testów (na przykład można podać „--test **/*.test.js”).
  • Zaktualizowane zostały pakietowy menedżer npm 10.2.0 oraz parser llhttp 9.1.2.
  • Wsparcie dla Visual Studio 2019 oraz wersji macOS starszych niż 11.0 zostało zakończone.

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