Node.js 19.0 er blevet udgivet, en platform til udførelse af netværksapplikationer i JavaScript. Node.js 19 tilhører en gren med almindelig support, hvor opdateringer vil blive udgivet indtil juni 2023. I de kommende dage afsluttes stabiliseringen af Node.js 18-grenen, som vil få LTS-status og blive understøttet indtil april 2025. Vedligeholdelsen af den tidligere LTS-version Node.js 16.0 vil fortsætte indtil september 2023, mens den forudgående LTS-version 14.0 vil vare indtil april 2023.
Hovedforbedringer:
- V8-motoren er opdateret til version 10.7, som anvendes i Chromium 107. Blandt ændringerne i motoren i forhold til Node.js 18-grenen er implementeringen af den tredje version af API Intl.NumberFormat, som har fået nye funktioner som formatRange(), formatRangeToParts() og selectRange(), sætgruppering, nye afrundingsmuligheder og præcisionsindstillinger samt muligheden for at tolke strenge som decimaltal. Yderligere er afhængighederne llhttp 8.1.0 og npm 8.19.2 blevet opdateret.
- En eksperimentel kommando "node —watch" er blevet foreslået med implementeringen af en overvågningsmodus, der sikrer genstart af processen ved ændring af den importerede fil (for eksempel, hvis "node —watch index.js" udføres, vil processen automatisk blive genstartet ved ændring af index.js).
- For alle udgående HTTP/HTTPS-forbindelser er der blevet tilføjet support til HTTP 1.1 Keep-Alive-mekanismen, som holder forbindelsen åben i en bestemt tid til at håndtere flere HTTP-anmodninger inden for én forbindelse. Det forventes, at brugen af Keep-Alive vil øge båndbredden og ydeevnen. Som standard er timeouten for at holde forbindelsen åben sat til 5 sekunder. Implementeringen af HTTP-klienten har fået tilføjet support til fortolkningen af Keep-Alive HTTP-headeren i svarene. server, og i implementeringen af Node.js HTTP-serveren er der tilføjet automatisk frakobling af inaktive klienter, der bruger Keep-Alive.
- WebCrypto API er blevet klassificeret som stabilt, undtagen funktioner der bruger algoritmerne Ed25519, Ed448, X25519 og X448. For at få adgang til WebCrypto-modulet kan man nu bruge globalThis.crypto eller require(‘node:crypto’).webcrypto.
- Støtten for DTrace, SystemTap og ETW (Event Tracing for Windows) tracing-værktøjer er blevet fjernet, da vedligeholdelse er blevet anset for uhensigtsmæssig på grund af kompleksiteten ved at holde dem opdaterede uden en passende støtteplan.
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
