Izdanje JavaScript Node.js 14.0 na strani poslužitelja
odvijao puštanje Čvor.js 14.0, platforme za izvršavanje mrežnih aplikacija u JavaScriptu. Node.js 14.0 pripada granama duge podrške, ali će taj status biti dodijeljen tek u listopadu, nakon stabilizacije. Bit će podrške za Node.js 14.0 provedeno do travnja 2023. Održavanje prethodne grane Node.js 12.0 LTS trajat će do travnja 2022., a prethodne grane 10.0 LTS do travnja 2021. Podrška za 13.x staging granu prestaje u lipnju ove godine.
Sposobnost generiranja u hodu ili kada se dogode određeni događaji je stabilizirana dijagnostička izvješća, koji odražavaju događaje koji pomažu u dijagnosticiranju problema kao što su rušenja, padovi performansi, curenje memorije, veliko opterećenje CPU-a, neočekivani ispis pogreške itd.
Dodana eksperimentalna API podrška Asinkrona lokalna pohrana s implementacijom klase AsyncLocalStorage koja se može koristiti za stvaranje asinkronog stanja s rukovateljima temeljenim na povratnim pozivima i obećanjima. AsyncLocalStorage vam omogućuje pohranu podataka dok se web zahtjev obrađuje, slično kao Thread-Local Storage na drugim jezicima.
Uklonjeno upozorenje eksperimentalne značajke pri pokretanju moduliECMAScript 6 povezani i izvezeni pomoću naredbi za uvoz i izvoz. Pritom je sama implementacija ESM modula još uvijek eksperimentalna.
V8 motor ažuriran na verziju 8.1 (1, 2, 3), koji uvodi nove optimizacije izvedbe i dodaje nove značajke kao što je novi logički operator spajanja "??" (vraća desni operand ako je lijevi operand NULL ili nedefiniran, i obrnuto), "?." za jednokratnu provjeru cijelog lanca svojstava ili poziva (na primjer, "db?.user?.name?.length" bez preliminarnih provjera), Intl.DisplayName metoda za dobivanje lokaliziranih imena itd.
Streams API je prerađen kako bi se poboljšala dosljednost Streams API-ja i riješile razlike u ponašanju ključnih dijelova Node.js. Na primjer, ponašanje http.OutgoingMessage slično je stream.Writable, a net.Socket slično je stream.Duplexu. Opcija autoDestroy je prema zadanim postavkama postavljena na "true", što znači da će se "_destroy" pozvati po završetku.
Dodana eksperimentalna API podrška WASI (Sučelje sustava WebAssembly) koji pruža programska sučelja za izravnu interakciju s operativnim sustavom (POSIX API za rad s datotekama, utičnicama itd.).
Podsjetimo da se Node.js platforma može koristiti i za poslužiteljsko održavanje web aplikacija i za kreiranje običnih klijentskih i poslužiteljskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js, veliki zbirka modula, u kojem možete pronaći module s implementacijom HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 poslužitelja i klijenata, module za integraciju s raznim web okvirima, WebSocket i Ajax rukovatelje, konektore na DBMS (MySQL, PostgreSQL, SQLite , MongoDB ), strojevi za predloške, CSS strojevi, implementacije kripto algoritama i sustava autorizacije (OAuth), XML parseri.
Kako bi se osigurala obrada velikog broja paralelnih zahtjeva, Node.js koristi model izvršavanja asinkronog koda koji se temelji na neblokirajućem rukovanju događajima i definiciji obrađivača povratnih poziva. Podržane metode za multipleksiranje veza su epoll, kqueue, /dev/poll i select. Knjižnica se koristi za multipleksiranje veza libuv, koji je nadgradnja nad libev na Unix sustavima i preko IOCP-a na Windowsima. Biblioteka se koristi za stvaranje skupa niti libeio, za izvođenje DNS upita u integriranom načinu rada bez blokiranja c-are. Svi sistemski pozivi koji uzrokuju blokiranje izvršavaju se unutar skupa niti i zatim, poput rukovatelja signalima, prenose rezultat svog rada natrag kroz neimenovanu cijev (pipe). Izvršenje JavaScript koda omogućeno je upotrebom mehanizma koji je razvio Google V8 (Osim toga, Microsoft razvija varijantu Node.js s pogonom Chakra-Core).
U svojoj srži, Node.js je sličan okvirima. Perl AnyEvent, Ruby Event Machine, Python Twisted и implementacija događaja u Tcl-u, ali je petlja događaja u Node.js skrivena od programera i nalikuje rukovanju događajima u web aplikaciji koja se izvodi u pregledniku. Kada pišete aplikacije za node.js, trebate uzeti u obzir specifičnosti programiranja vođenog događajima, na primjer, umjesto da radite "var result = db.query("select..");" uz čekanje završetka rada i naknadnu obradu rezultata, Node.js koristi princip asinkronog izvođenja, tj. kod se transformira u "db.query("select..", function (result) {result processing});", u kojem će kontrola trenutno prijeći na daljnji kod, a rezultat upita će se obrađivati kako podaci stignu. .