wydanie , platformy do uruchamiania aplikacji sieciowych w języku JavaScript. Jednocześnie zakończono stabilizację poprzedniej gałęzi Node.js 12.x, która została przeniesiona do kategorii wydań z długoterminowym wsparciem, aktualizacje dla której będą wydawane przez 4 lata. Wsparcie dla poprzedniej gałęzi LTS Node.js 10.0 będzie trwało do kwietnia 2021 roku, a dla gałęzi LTS 8.0 do stycznia 2020 roku.
Podstawowe :
- Silnik V8 zaktualizowano do wersji , w której zastosowano nowe metody optymalizacji wydajności, poprawiono destrukturyzację obiektów, zmniejszono zużycie pamięci i skrócono czas przygotowania do wykonania WebAssembly;
- Domyślnie włączono pełne wsparcie internacjonalizacji i Unicode na bazie bibliotek (International Components for Unicode), umożliwiająca programistom pisanie kodu, pracę z różnymi językami i lokalizacjami. Moduł full-icu jest teraz domyślnie zainstalowany;
- Stabilizowano API , tworzenie wielowątkowych cykli przetwarzania zdarzeń (event loop). Implementacja opiera się na module worker_threads, który umożliwia uruchamianie kodu JavaScript w kilku równoległych wątkach. Stabilne wsparcie API Workers Threads zostało także przeniesione do gałęzi LTS Node.js 12.x;
- Podwyższono wymagania dotyczące platform. Do kompilacji potrzebna jest teraz co najmniej macOS 10.11 (wymagane Xcode 10), AIX 7.2, Ubuntu 16.04, Debian 9, EL 7, Alpine 3.8, Windows 7/2008;
- Poprawiono wsparcie dla Pythona 3. W przypadku zainstalowania zarówno Pythona 2, jak i Pythona 3, wciąż używany jest Python 2, ale dodano możliwość kompilacji przy zainstalowanym tylko Pythonie 3;
- Usunięto starą implementację parsera HTTP ("—http-parser=legacy"). Usunięto lub przeniesiono do kategorii przestarzałych wywołania i właściwości FSWatcher.prototype.start(), ChildProcess._channel, metoda open() w obiektach ReadStream i WriteStream, request.connection, response.connection, module.createRequireFromPath();
- Następnie aktualizacja 13.0.1, w której usunięto kilka błędów. W tym rozwiązano problem z wyświetlaniem w npm 6.12.0 ostrzeżenia dotyczącego używania nieobsługiwanej wersji.
Przypominamy, że platforma Node.js może być używana zarówno do serwerowego wsparcia działania aplikacji internetowych, jak i do tworzenia standardowych programów sieciowych dla klientów i serwerów. W celu rozszerzenia funkcjonalności aplikacji dla Node.js przygotowano dużą , w której 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, obsługiwacze WebSocket i Ajax, konektory do baz danych (MySQL, PostgreSQL, SQLite, MongoDB), silniki szablonów, silniki CSS, implementacje algorytmów kryptograficznych i systemów autoryzacji (OAuth), parsery XML.
Aby zapewnić obsługę dużej liczby równoległych zapytań, Node.js wykorzystuje asynchroniczny model uruchamiania kodu, oparty na obsłudze zdarzeń w trybie nieblokującym oraz definiowaniu funkcji callback. Metody multiplexowania połączeń obejmują takie mechanizmy jak epoll, kqueue, /dev/poll i select. Do multiplexowania połączeń używana jest biblioteka , która jest nadbudową nad w systemach Unix i nad IOCP w Windows. Do tworzenia puli wątków (thread pool) wykorzystywana jest biblioteka , do wykonywania zapytań DNS w trybie nieblokującym zintegrowano . Wszystkie wywołania systemowe, które mogą wywoływać blokowanie, są wykonywane wewnątrz puli wątków i następnie, podobnie jak obsługa sygnałów, przekazują wynik swojej pracy z powrotem przez nieoznaczoną rurę (pipe). Wykonywanie kodu JavaScript zapewnione jest przez wykorzystanie zaprojektowanego przez Google silnika (dodatkowo Microsoft rozwija wersję Node.js z silnikiem Chakra-Core).
Zasadniczo Node.js przypomina frameworki , , i zdarzeń w Tcl, ale pętla przetwarzania zdarzeń (event loop) w Node.js jest ukryta przed programistą i przypomina przetwarzanie zdarzeń w aplikacji webowej działającej w przeglądarce. Podczas pisania aplikacji dla Node.js należy uwzględnić specyfikę programowania opartego na zdarzeniach, na przykład, zamiast wykonywania „var result = db.query(„select..”);” z oczekiwaniem na zakończenie pracy i późniejszą obsługą wyników, w Node.js stosuje się zasadę asynchronicznego wykonania, tj. kod przekształca się w „db.query(„select..”, function (result) {obsługa wyniku});”, przy czym kontrola natychmiast przechodzi do dalszego kodu, a wynik zapytania jest obsługiwany w miarę przybywania danych.
Źródło: opennet.ru
