Node.js 18.0 er blevet udgivet, en platform til kørende netværksapplikationer i JavaScript. Node.js 18.0 er klassificeret som en version med langvarig support, men denne status tildeles først i oktober efter stabilisering. Supporten for Node.js 18.x vil vare indtil april 2025. Vedligeholdelsen af den tidligere LTS-version Node.js 16.x vil fortsætte indtil april 2024, mens for den før det, LTS-version 14.x, vil den generelle support stoppe i april 2023. Support på LTS-version 12.x vil ophøre den 30. april, og for den mellemliggende version Node.js 17.x den 1. juni.
Hovedforbedringer:
- V8-motoren er blevet opdateret til version 10.1, som anvendes i Chromium 101. I forhold til udgivelsen af Node.js 17.9.0 er der tilføjet støtte til nye funktioner som findLast og findLastIndex metoder til at finde elementer fra slutningen af et array, samt funktionen Intl.supportedValuesOf. API'en Intl.Locale er forbedret. Initialiseringen af klassefelter og private metoder er blevet hurtigere.
- Den eksperimentelle fetch()-API er nu aktiveret som standard, og er designet til at downloade ressourcer over nettet. Implementeringen er baseret på kode fra HTTP/1.1 klienten undici og ligner mest muligt det tilsvarende API, der findes i browsere. Dette inkluderer støtte til interface som FormData, Headers, Request og Response for at manipulere HTTP-anmodningers og svarers headers. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- En eksperimentel implementering af API'en Web Streams er blevet tilføjet, som giver adgang til datastreams hentet over nettet. API'en giver mulighed for at tilføje egne håndterere til at arbejde med dataene efterhånden som informationen strømmer ind, uden at vente på at hele filen er downloadet. I Node.js er nu objekter såsom ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream og DecompressionStream tilgængelige.
- API'en Blob er blevet inkluderet som stabil, hvilket tillader indkapsling af uændrede rådata til sikker brug på tværs af forskellige arbejdsgange.
- API'en BroadcastChannel er blevet tilføjet som stabil, hvilket muliggør asynkron meddelelse i `one sender — multiple receivers` format.
- En eksperimentel node:test modul er blevet tilføjet til at oprette og køre tests i JavaScript, der returnerer resultater i TAP (Test Anything Protocol) format.
- Færdige builds er blevet genereret til Red Hat Enterprise Linux (RHEL) 8 og andre distributioner baseret på Glibc 2.28+, herunder Debian 10 og Ubuntu 20.04, samt macOS 10.15+. På grund af problemer med opbygningen af V8-motoren er opbygningen af 32-bit builds til Windows midlertidigt stoppet.
- Der tilbydes en eksperimentel mulighed for at bygge Node.js-kørbare filer med brugerdefinerede komponenter, der initialiseres ved opstart. For at bestemme startkomponenterne er der tilføjet en mulighed «—node-snapshot-main» til build-scriptet configure, fx «./configure —node-snapshot-main=marked.js; name node»
Node.js-platformen kan bruges til både server-side drift af webapplikationer og til at skabe almindelige klient- og serverbaserede netværksprogrammer. Der er forberedt en stor samling af moduler til at udvide funktionaliteten af applikationer til Node.js, hvor man kan finde moduler med implementeringer servere og HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klienter, moduler til integration med forskellige web-rammer, WebSocket- og Ajax-håndterere, forbindelser til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), templating-motorer, CSS-motorer, implementeringer af kryptografi-algoritmer og autorisationssystemer (OAuth), XML-parsere.
For the handling of a large number of parallel requests, Node.js utilizes an asynchronous code execution model based on event-driven, non-blocking I/O and the definition of callback handlers. It supports multiplexing methods such as epoll, kqueue, /dev/poll, and select. The libuv library, which acts as a wrapper over libev in Unix systems and IOCP in Windows, is used for connection multiplexing. A thread pool is created using the libeio library, and for performing non-blocking DNS queries, c-ares is integrated. All blocking system calls are executed within the thread pool and then, similar to signal handlers, relay their results back via an unnamed pipe. JavaScript code execution is facilitated through the V8 engine developed by Google (Microsoft also develops a Node.js variant with the Chakra-Core engine).
In essence, Node.js is similar to frameworks like Perl AnyEvent, Ruby Event Machine, Python Twisted, and the event implementation in Tcl, but the event loop in Node.js is abstracted from the developer, resembling the event handling in a web application running in a browser. When developing applications for Node.js, one must consider the aspects of event-driven programming; for instance, instead of executing "var result = db.query('select..');" while waiting for the operation to complete and subsequently handling results, Node.js employs asynchronous execution principles, meaning the code transforms to "db.query('select..', function (result) {result handling});" whereby control immediately passes to subsequent code while the result will be processed as data arrives.
Kilde: opennet.ru
