The release of Node.js 25.0.0 has taken place, a platform for running network applications in JavaScript. Node.js 25.0 belongs to the intermediate branches, which will be maintained for 7 months (until June 2026). In the coming days, the stabilization of the Node.js 24 branch will be completed, which will receive LTS status at the end of October and will be supported until April 2028. Support for the previous LTS branches Node.js 22.x and 20.x will continue until April 2027 and 2026 respectively.
Hovedforbedringer:
- The V8 engine has been updated to version 14.1, used in Chromium 141. Significant performance improvements have been noted in the JSON.stringify method, as well as optimizations for WebAssembly and JIT, along with the implementation of methods for converting between Uint8Array and data in base64 or hexadecimal representation.
- An option ‘—allow-net’ has been added to the Permission Model mechanism, which allows restricting access to certain resources during execution for network access (if the option ‘—allow-net’ is not specified, running Node.js in ‘—permission’ mode will result in an ERR_ACCESS_DENIED error when attempting to perform network operations).
- Enabled by default browser compatible The Web Storage API, designed for persistent (localStorage class) or temporary (sessionStorage class) storage of data in key/value format. The experimental label has been removed from the Web Storage API.
- The ErrorEvent class has been moved to globally accessible (can be used without explicit import), providing a browser-compatible interface for handling events with error information.
- For WebAssembly, support for the JSPI (JavaScript Promise Integration) API has been included, allowing access to asynchronous Web APIs from sequentially executed code compiled into WebAssembly.
- An option ‘NODE_COMPILE_CACHE_RELATIVE_PATH’ has been added for portable handling of compiled object caches. In this mode, hashes for identifying objects are calculated using relative paths to files, allowing the contents of the code directory to be moved and bundled along with the cache.
- Added the ability to profile CPU load.
- The NPM package manager has been updated to version 11.6.2.
- Support for Python 3.14 has been added.
- The minimum supported versions stated are Clang 19 and Xcode 16.4.
- Støtte til SlowBuffer-objektet er blevet ophævet, da det tidligere blev erklæret forældet på grund af potentielle sikkerhedsproblemer. I stedet bør metoden Buffer.allocUnsafeSlow() anvendes.
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 at håndtere et stort antal parallelle anmodninger anvender Node.js en asynkron kodeudviklingsmodel baseret på begivenhedsbehandling i ikke-blokerende tilstand og bestemmelse af callback-håndterere. Metoder som epoll, kqueue, /dev/poll og select understøttes til multiplexing af forbindelser. Biblioteket libuv, som er bygget over libev i Unix-systemer og over IOCP i Windows, bruges til multiplexing af forbindelser. Et tråd-pool oprettes ved hjælp af biblioteket libeio, mens integrationen af c-ares muliggør ikke-blokerende DNS-anmodninger. Alle systemopkald, der medfører blokering, udføres inden for tråd-poolen og sender derefter deres resultater tilbage gennem en uspecificeret kanal (pipe), ligesom signalhåndtererne.
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
