Megérkezett a Node.js 23.0.0, a JavaScript nyelvű hálózati alkalmazások futtatására szolgáló platform. A Node.js 23.0 a köztes ágak közé tartozik, amelyek karbantartása 7 hónapig tart (2025 júniusáig). A következő napokban befejeződik a Node.js 22 stabilizálása, amely október 29-én LTS státuszt kap, és 2027 áprilisáig támogatott marad. A korábbi LTS ágak, a Node.js 20.x és 18.x támogatása 2026 és 2025 áprilisáig folytatódik.
Fő fejlesztések:
- Kísérleti támogatás került hozzáadásra a TypeScript nyelvhez, amely lehetővé teszi a típusok explicit meghatározását. A támogatás a „—experimental-strip-types” és a „—experimental-transform-types” opciókkal aktíválható. Az első opció esetén a TypeScript-tel kapcsolatos típusdefiníciók eltávolításra kerülnek (típusellenőrzés nem történik, a kód egyszerűen JavaScript típusok nélküli formájára kerül átkonvertálásra). A második opció a TypeScript szintaxis bizonyos elemeit, például enumokat és namespace-eket, JavaScript kódra alakítja át.
- Alapértelmezés szerint engedélyezve van a „require()” használata az ESM (ECMAScript Modules) JavaScript modulok szinkron módú betöltésére. Az ESM modulokat a böngészők használják, és helyettesítik a Node.js-hez specifikus CommonJS modulokat. Az ESM modul Node.js-ben csak szinkron módban használható a „require()” által (await nélkül a legfelső szinten).
- Automatikusan észlelhetők az ESM modulok kiterjesztés nélküli vagy „.js” kiterjesztésű fájlokban. Korábban az ilyen fájlokat CommonJS moduloknak tekintették, hacsak a megfelelő könyvtárban található package.json fájlban kifejezetten nem volt megadva a típus („type”: „module”). Az új verzióban a package.json-ban nem megjelölt típusú fájlok esetén először a CommonJS modulra tett kísérlet történik, és ha ez nem sikerül, akkor ESM modulra.
- Kísérleti megvalósítás került hozzáadásra a böngészőkkel kompatibilis Web Storage API, amely az adatok kulcs/érték formátumban történő tartós (localStorage osztály) vagy ideiglenes (sessionStorage osztály) tárolására szolgál. A Web Storage támogatásának engedélyezéséhez a „—experimental-webstorage” kapcsolóval kell indítani, és meg kell adni a tárolót tartalmazó fájl elérési útját a „—localstorage-file” kapcsolóval.
- Hozzáadtak egy kísérleti SQLite API-t az adatbázisok kezeléséhez, SQL lekérdezési nyelvet és a SQLite könyvtár alapú tárolót használva. Az adatbázis fájlban történő tárolásán kívül be lehet helyezni a memóriába, a fájlnevének :memory: megadásával. Az említett Web Storage API is az SQLite-ra épül, ami hozzájárult ahhoz, hogy az SQLite a Node.js függőségei közé kerüljön.
- Stabilnak nyilvánították a node —run parancsot, amely a package.json fájlban megadott szkriptek futtatására szolgál.
- Bevezetésre került az opcionális lefordított kód lemezen való gyorsítótárazásának támogatása a modulok indításának jelentős felgyorsítása érdekében. A gyorsítótárazás engedélyezése a NODE_COMPILE_CACHE környezeti változóval történik. Funkcióját tekintve hasonlít a v8-compile-cache csomagra, de magasabb teljesítményt és ESM modulok támogatását nyújt.
- Optimalizálták a Buffer objektumot, amely jelentősen növelte a Buffer.copy() és Buffer.write() módszerek teljesítményét.
- Javították a node:fs modul teljesítményét, csökkentve egyidejűleg a C++ kódkihívások számát is.
- A V8 motor frissítve lett a 12.9-es verzióra, amelyet a Chromium 129 használ.
- El lett távolítva a 32-bites Windows rendszerek támogatása.
- A Node.js és a V8 motor C++20 szabványban meghatározott új lehetőségeinek bevezetése miatt megnövekedtek a GCC fordító verziójával kapcsolatos követelmények. A Node.js összeállításához mostantól legalább GCC 12-es verzió szükséges.
A Node.js platform szerver oldali webalkalmazások működtetésére, valamint hagyományos kliens és szerver hálózati programok készítésére használható. A Node.js alkalmazások funkcionalitásának bővítése érdekében egy nagy modulgyűjtemény készült, amely tartalmaz különböző megvalósítású modulokat. szerverek és HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klienseket, valamint modulokat különböző webkeretrendszerek integrálásához, WebSocket és Ajax kezelőket, az adatbázisokhoz (MySQL, PostgreSQL, SQLite, MongoDB) való kapcsolódásokat, sablongenerátorokat, CSS-motorokat, kriptográfiai algoritmusok és hitelesítési rendszerek (OAuth) megvalósításait, XML-parsereket.
A párhuzamos lekérések nagy számú feldolgozásának biztosítása érdekében a Node.js aszinkron kódvégrehajtási modellt alkalmaz, amely események feldolgozásán alapul nem blokkoló módban, és callback-kezelők definiálásával. A kapcsolatok multiplexelésére olyan módszerek támogatottak, mint az epoll, kqueue, /dev/poll és select. A kapcsolatok multiplexeléséhez a libuv könyvtárat használják, amely a libev fölé épül Unix rendszereken és az IOCP fölé Windows alatt. A szálak medencéjének (thread pool) létrehozásához a libeio könyvtárat alkalmazzák, míg a DNS-lekérdezések nem blokkoló módú végrehajtásához a c-ares integrálva van. Minden blokkoló rendszerhívás a szálak medencéjén belül történik, majd, akárcsak a jelkezelők, az eredményüket egy névtelen csőn (pipe) keresztül továbbítják.
A JavaScript-kód végrehajtása a Google által fejlesztett V8 motor aktiválásával valósul meg (továbbá a Microsoft is fejleszti a Node.js alternatíváját a Chakra-Core motorral). A Node.js alapvetően hasonlít a Perl AnyEvent, Ruby Event Machine, Python Twisted és a Tcl eseménykezelésének megvalósítására, azonban a Node.js eseményfeldolgozó ciklusa el van rejtve a fejlesztő elől, és hasonlít a webalkalmazásban, böngészőben zajló eseménykezelésre.
Forrás: opennet.ru
