Megjelent a Node.js 23.0.0, a hálózati alkalmazások JavaScriptben futtatására szolgáló platform. A Node.js 23.0 köztes ágnak minősül, amely 7 hónapig lesz támogatott (2025 júniusáig). A következő napokban befejeződik a Node.js 22 ág stabilizálása, amely október 29-én kap LTS státuszt és 2027 áprilisáig lesz támogatott. A Node.js 20.x és 18.x korábbi LTS-ágainak támogatása 2026 áprilisáig, illetve 2025 áprilisáig folytatódik.
Főbb fejlesztések:
- Kísérleti támogatás hozzáadva a TypeScripthez, amely lehetővé teszi az explicit típusdefiníciókat. A támogatás a "--experimental-strip-types" és "--experimental-transform-types" opciókkal engedélyezhető. Az első opció esetén a TypeScript-szel való munkavégzés a nyelvspecifikus típusdefiníciók törlésére redukálódik (a típusellenőrzés nem történik meg, a kódot egyszerűen típus nélküli JavaScript-be konvertálják). A második lehetőség egyes TypeScript szintaxiselemeket, például enumokat és névtereket alakít át JavaScript-kóddá.
- Alapértelmezés szerint engedélyezve van a „require()” hívás használatának lehetősége a JavaScript ESM modulok (ECMAScript modulok) szinkron módban történő betöltéséhez. Az ESM-modulok a böngészőkben használatosak, és helyettesítik a Node.js-re jellemző CommonJS-modulokat. A Node.js "require()" funkciójával történő betöltéshez az ESM modult szinkronban kell végrehajtani (a legfelső szintű várakozás nélkül).
- A „.js” kiterjesztéssel rendelkező fájlokban az ESM modulok automatikus észlelése biztosított. Korábban az ilyen fájlokat CommonJS-modulként kezelték, kivéve, ha a típusukat kifejezetten megadták az ugyanabban a könyvtárban található package.json fájlban („type”: „module”). Az új verzióban azoknál a fájloknál, amelyek típusa nincs megadva a package.json-ban, először CommonJS-modulként próbál betölteni, és ha ez nem sikerül, akkor ESM-modulként.
- Kísérleti megvalósítás hozzáadva kompatibilis a böngészőkkel A Web Storage API-t kulcs/érték formátumú adatok állandó (a localStorage osztály) vagy ideiglenes (a sessionStorage osztály) tárolására tervezték. A Web Storage támogatásának engedélyezéséhez az API-t a "--experimental-webstorage" jelzővel kell futtatni, és a "--localstorage-file" jelzővel kell megadni a tárolófájl elérési útját.
- Kísérleti SQLite API hozzáadva az SQL lekérdezési nyelvet használó adatbázisokkal való munkavégzéshez és az SQLite könyvtáron alapuló tároláshoz. Amellett, hogy az adatbázist lemezen fájlban tárolja, a memóriába is elhelyezhető, ha a fájlnév helyett a „:memory:”-t adja meg. A fent említett Web Storage API is az SQLite tetején van megvalósítva, ami az SQLite hozzáadását eredményezi a Node.js függőségeként.
- A „node —run” parancsot stabilnak nyilvánították, és a package.json fájlban meghatározott parancsfájlok futtatására tervezték.
- Megvalósított opcionális támogatás a lefordított kód gyorsítótárazásához a lemezen a modulok elindításának jelentős felgyorsítása érdekében. A gyorsítótárazás a NODE_COMPILE_CACHE környezeti változón keresztül engedélyezett. Célját tekintve a szolgáltatás hasonlít a v8-compile-cache csomagra, de különbözik a nagyobb teljesítményben és az ESM modulok támogatásában.
- A Buffer objektumot úgy optimalizálták, hogy jelentősen növelje a Buffer.copy() és Buffer.write() metódusok teljesítményét.
- Javult a node:fs modul teljesítménye, ami a C++ kódra történő hívások számát is csökkenti működés közben.
- A V8-as motort a Chromium 12.9-ben használt 129-es verzióra frissítették.
- A 32 bites Windows rendszerek támogatása megszűnt.
- A C++8 szabványban meghatározott funkciók Node.js-ben és a V20-as motorban történő bevezetése miatt a GCC fordítóverzió követelményei megemelkedtek. A Node.js felépítéséhez most legalább GCC 12 szükséges.
A Node.js platform használható mind webes alkalmazások szerveroldali támogatására, mind szabványos kliens- és szerveroldali hálózati programok létrehozására. A Node.js alkalmazások funkcionalitásának bővítése érdekében számos modul készült, beleértve azokat is, amelyek implementációval rendelkeznek. szervereket és HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 kliensek, modulok különféle webes keretrendszerekkel való integrációhoz, WebSocket és Ajax kezelők, csatlakozók adatbázis-kezelő rendszerekhez (MySQL, PostgreSQL, SQLite, MongoDB), sablonmotorok, CSS motorok, kriptográfiai algoritmusok és jogosultságkezelési rendszerek (OAuth) implementációi, XML elemzők.
Nagyszámú párhuzamos kérés kezelésére a Node.js aszinkron kódvégrehajtási modellt használ, amely nem blokkoló eseményfeldolgozáson és visszahíváskezelők meghatározásán alapul. A kapcsolatok multiplexelésének támogatott módszerei közé tartozik az epoll, a kqueue, a /dev/poll és a select. A kapcsolat multiplexeléséhez a libuv könyvtárat használják, amely a libev kiegészítője Unix rendszereken és az IOCP Windows rendszeren. A libeio könyvtár szálkészlet létrehozására szolgál, a c-ares pedig integrálva van DNS-lekérdezések végrehajtására nem blokkoló módban. Minden blokkolást okozó rendszerhívás végrehajtásra kerül a szálkészleten belül, majd a jelkezelőkhöz hasonlóan egy névtelen csőben továbbítják a munkájuk eredményét.
A JavaScript kód végrehajtását a Google által fejlesztett V8-as motor használata biztosítja (a Microsoft emellett a Node.js egy verzióját is fejleszti Chakra-Core motorral). Lényegében a Node.js hasonló a Perl AnyEvent, Ruby Event Machine, Python Twisted keretrendszerekhez és az események Tcl-ben való megvalósításához, de a Node.js eseményhuroka rejtve van a fejlesztő elől, és egy webalkalmazásban történő eseményfeldolgozáshoz hasonlít. böngészőben fut.
Forrás: opennet.ru
