Szerveroldali JavaScript platform Node.js 20.0 elérhető

Megtörtént a Node.js 20.0 kiadása, amely egy platform a hálózati alkalmazások JavaScriptben történő futtatására. A Node.js 20.0 hozzá lett rendelve a hosszú támogatási ághoz, de ez az állapot csak októberben, a stabilizálás után kerül hozzárendelésre. A Node.js 20.x 30. április 2026-ig támogatott. A korábbi Node.js 18.x LTS ág karbantartása 2025 áprilisáig, a korábbi 16.x LTS ág karbantartása 2023 szeptemberéig tart. A 14.x LTS ágat április 30-án, a Node.js 19.x átmeneti ágat pedig június 1-jén tartják fenn.

Főbb fejlesztések:

  • A V8-as motort a Chromium 11.3-ban használt 113-as verzióra frissítették. A Chromium 19 motort használó Node.js 107 ághoz képest a String.prototype.isWellFormed és a toWellFormed függvényeket érintő változtatások közül az Array.prototype és TypedArray.prototype metódusok a másoláshoz az Array és TypedArray objektumok megváltoztatásakor, "v" jelző a RegExpben, támogatás az ArrayBuffer átméretezéséhez és a SharedArrayBuffer méretének növeléséhez, a WebAssembly farokhívása.
  • Egy kísérleti engedélymodell-mechanizmus javasolt, amely lehetővé teszi bizonyos erőforrásokhoz való hozzáférés korlátozását a végrehajtás során. Az engedélymodell támogatása a "--experimental-permission" jelző megadásával engedélyezhető futás közben. A kezdeti megvalósításban olyan opciókat javasoltak, amelyek korlátozzák az írási (--allow-fs-write) és az olvasási (--allow-fs-read) hozzáférést az FS egyes részeihez, a gyermekfolyamatokhoz (--allow-child-process). , kiegészítők (--no-addons ) és szálak (--allow-worker). Például a /tmp könyvtárba való írás és a /home/index.js fájl olvasásának engedélyezéséhez a következőket adhatja meg: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    A hozzáférés ellenőrzéséhez a process.permission.has() metódus használata javasolt, például "process.permission.has('fs.write',"/tmp/test").

  • A "--experimental-loader" opción keresztül betöltött ECMAScript külső modulok (ESM-ek) kezelői mostantól egy külön szálban, a főszáltól elkülönítve futnak, ami kiküszöböli az alkalmazáskód és a betöltött ESM-modulok metszéspontját. A böngészőkhöz hasonlóan az import.meta.resolve() metódus is szinkronban fut le, ha egy alkalmazásból hívják. A Node.js egyik következő ágában az ESM betöltési támogatást a tervek szerint áthelyezik a stabil szolgáltatások kategóriájába.
  • A node:test (test_runner) modul, amely JavaScript-tesztek létrehozására és futtatására szolgál, amelyek TAP (Test Anything Protocol) formátumban adják vissza az eredményeket, átkerült a stabilba.
  • Külön teljesítménycsapat alakult, amely az új ágra való felkészülés során a különféle futásidejű összetevők felgyorsításán dolgozott, beleértve az URL-elemzést, a fetch()-et és az EventTarget-et. Például az EventTarget inicializálásának többletköltsége felére csökkent, az URL.canParse() metódus teljesítménye jelentősen javult, és az időzítők hatékonysága is javult. Ezenkívül egy nagy teljesítményű URL-elemző - Ada 2.0, C ++ nyelven írt kiadása is szerepel a kompozícióban.
  • Folytatódott az alkalmazások egyetlen végrehajtható fájl formájában történő szállítására szolgáló kísérleti szolgáltatás (SEA, Single Executable Applications) fejlesztése. Egy végrehajtható fájl létrehozásához most egy JSON-konfigurációs fájlból előállított blobot kell helyettesíteni (a JavaScript-fájl helyett).
  • Továbbfejlesztett Web Crypto API kompatibilitás más projektek implementációival.
  • Hivatalos Windows-támogatás hozzáadva ARM64 rendszereken.
  • A WASI (WebAssembly System Interface) bővítmények folyamatos támogatása az önálló WebAssembly alkalmazások létrehozásához. A WASI-támogatás engedélyezéséhez nem szükséges egy speciális parancssori jelző megadása.

A Node.js platform webalkalmazások szerverkarbantartására és normál kliens és szerver hálózati programok létrehozására egyaránt használható. A Node.js alkalmazások funkcionalitásának bővítésére egy nagy modulgyűjtemény készült, amelyben megtalálhatók a HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 szerverek és kliensek megvalósításával rendelkező modulok, az integrációhoz szükséges modulok különféle webes keretrendszerekkel, WebSocket és Ajax kezelőkkel, DBMS csatlakozókkal (MySQL, PostgreSQL, SQLite, MongoDB), sablonozó motorokkal, CSS motorokkal, kriptoalgoritmusok és engedélyezési rendszerek implementációival (OAuth), XML elemzőkkel.

Nagyszámú párhuzamos kérés feldolgozásának biztosítása érdekében a Node.js aszinkron kódvégrehajtási modellt használ, amely nem blokkoló eseménykezelésen és a visszahíváskezelők meghatározásán alapul. A kapcsolatok multiplexelésének támogatott módszerei az epoll, kqueue, /dev/poll és select. A kapcsolat multiplexeléséhez a libuv könyvtárat használják, amely a libev kiegészítője Unix rendszereken és 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ához nem blokkoló módban. Minden blokkolást okozó rendszerhívás a szálkészleten belül kerül végrehajtásra, majd a jelkezelőkhöz hasonlóan egy névtelen csőn (pipe) keresztül továbbítja a munkájuk eredményét. A JavaScript kód végrehajtását a Google által kifejlesztett V8-as motor 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 a Tcl eseménymegvalósításhoz, de a Node.js eseményhurok rejtve van a fejlesztő elől, és egy futó webalkalmazás eseménykezelésére hasonlít. böngészőben. Amikor alkalmazásokat ír a node.js számára, figyelembe kell vennie az eseményvezérelt programozás sajátosságait, például a "var result = db.query("select..");" a munka befejezésének várakozásával és az eredmények későbbi feldolgozásával a Node.js az aszinkron végrehajtás elvét használja, azaz. a kód átalakul "db.query("select..", függvény (eredmény) {eredményfeldolgozás});", amelyben a vezérlés azonnal átkerül a további kódra, és a lekérdezés eredménye az adatok beérkezésekor kerül feldolgozásra.

Forrás: opennet.ru

Hozzászólás