Node.js 23.0.0 er blevet frigivet, en platform til at køre netværksapplikationer skrevet i JavaScript. Node.js 23.0 tilhører de midlertidige grene, som vil blive vedligeholdt i 7 måneder (indtil juni 2025). I de kommende dage afsluttes stabiliseringen af Node.js 22, som den 29. oktober vil opnå LTS-status og vil blive understøttet indtil april 2027. Understøttelsen af de tidligere LTS-grene Node.js 20.x og 18.x vil vare indtil april 2026 og 2025 henholdsvis.
Hovedforbedringer:
- Der er tilføjet eksperimentel understøttelse af TypeScript, som tillader eksplicit typeangivelse. Understøttelsen aktiveres ved hjælp af indstillingerne "—experimental-strip-types" og "—experimental-transform-types". Med den første indstilling reduceres arbejdet med TypeScript til at fjerne sprog-specifikke typeangivelser (typekontrol udføres ikke; koden konverteres blot til JavaScript uden typer). Den anden indstilling konverterer visse typer TypeScript-syntaks til JavaScript-kode, såsom enumerationer (enum) og navnerum (namespace).
- Muligheden for at bruge "require()" til at indlæse JavaScript-moduler ESM (ECMAScript Modules) er nu aktiveret som standard i synkron tilstand. ESM-moduler anvendes i browsere og erstatter CommonJS-moduler, som er specifikke for Node.js. For at indlæse en ESM-modul via "require()" i Node.js skal modulet køres synkront (uden await på øverste niveau).
- Automatisk identifikation af ESM-moduler i filer uden udvidelse eller med udvidelsen ".js" er nu sikret. Tidligere blev sådanne filer betragtet som CommonJS-moduler, medmindre deres type tydeligt blev angivet i den samme katalogs package.json-fil ("type": "module"). I den nye version forsøges det først at indlæse filer uden angivet type i package.json som CommonJS-moduler, og hvis det mislykkes, som ESM-moduler.
- Der er tilføjet eksperimentel implementering kompatibel med browsere API Web Storage, der er beregnet til permanent (localStorage-klassens) eller midlertidig (sessionStorage-klassens) lagring af data i nøgle/værdi-format. For at aktivere understøttelsen af Web Storage kræves det, at der startes med flaget "—experimental-webstorage" og angivelse af stien til filen med lageret via flaget "—localstorage-file".
- Der er tilføjet et eksperimentelt SQLite API til at arbejde med databaser ved hjælp af SQL forespørgssproget og lagring baseret på SQLite-biblioteket. Udover at gemme databasen i en fil på disken, kan den også placeres i hukommelsen ved at angive «:memory:» i stedet for filnavnet. Det ovenfor nævnte Web Storage API er også implementeret oven på SQLite, hvilket har ført til at SQLite er blevet en af afhængighederne for Node.js.
- Der er erklæret et stabilt «node --run» team, der er designet til at køre scripts defineret i package.json-filen.
- Der er implementeret valgfri støtte til caching af kompileret kode på disken for betydeligt at accelerere opstarten af moduler. Aktivering af caching sker gennem miljøvariablen NODE_COMPILE_CACHE. Denne mulighed minder om pakken v8-compile-cache, men adskiller sig ved højere ydeevne og støtte for ESM-moduler.
- Objektet Buffer er blevet optimeret, hvilket har betydeligt øget ydeevnen for metoderne Buffer.copy() og Buffer.write().
- Ydeevnen for modulet node:fs er blevet forbedret, hvor antallet af kald til C++ kode i processen også er blevet reduceret.
- V8 motoren er blevet opdateret til version 12.9, som anvendes i Chromium 129.
- Støtte til 32-bit systemer med Windows er blevet fjernet.
- På grund af implementeringen af funktioner defineret i C++20 standarden i Node.js og V8 motoren er kravene til versionen af GCC compileren blevet højere. For at bygge Node.js kræves nu mindst version 12 af GCC.
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 handling a large number of concurrent requests, Node.js utilizes an asynchronous code execution model based on event-driven, non-blocking I/O and the definition of callback handlers. Supported multiplexing methods include epoll, kqueue, /dev/poll, and select. The library libuv, which acts as a wrapper around libev on Unix systems and IOCP on Windows, is used for multiplexing connections. The library libeio is employed to create a thread pool for executing DNS queries in a non-blocking mode, while c-ares is integrated for this purpose. All blocking system calls are performed within the thread pool and pass their results back through an unnamed pipe, similar to signal handlers.
Udførelsen af JavaScript-kode understøttes af Googles udviklede V8-motor (Microsoft udvikler desuden en version af Node.js med Chakra-Core-motoren). I sin essens ligner Node.js frameworks som Perl AnyEvent, Ruby Event Machine, Python Twisted og eventhåndtering i Tcl, men event loop'en i Node.js er skjult for udvikleren og minder om begivenhedshåndtering i en webapplikation, der kører i en browser.
Kilde: opennet.ru
