Bedienerkant JavaScript-platform Node.js 20.0 beskikbaar

Die vrystelling van Node.js 20.0, 'n platform vir die uitvoering van netwerktoepassings in JavaScript, het plaasgevind. Node.js 20.0 is aan die lang ondersteuningstak toegewys, maar hierdie status sal eers in Oktober, na stabilisering, toegeken word. Node.js 20.x sal tot 30 April 2026 ondersteun word. Instandhouding van die vorige Node.js 18.x LTS-tak sal tot April 2025 duur, en die vorige 16.x LTS-tak tot September 2023. Die 14.x LTS-tak sal op 30 April in stand gehou word, en die Node.js 19.x-tussentydse tak op 1 Junie.

Belangrikste verbeterings:

  • Die V8-enjin is opgedateer na weergawe 11.3, wat in Chromium 113 gebruik word. Van die veranderinge in vergelyking met die Node.js 19-tak, wat die Chromium 107-enjin gebruik het, die String.prototype.isWellFormed en toWellFormed funksies, die Array.prototype en TypedArray.prototype metodes om te werk met kopie op verandering van Array en TypedArray voorwerpe, "v" vlag in RegExp, ondersteuning vir die grootte van ArrayBuffer en die verhoging van die grootte van SharedArrayBuffer, stert-oproep in WebAssembly.
  • 'n Eksperimentele Toestemmingsmodelmeganisme word voorgestel wat jou toelaat om toegang tot sekere hulpbronne tydens uitvoering te beperk. Toestemming Model-ondersteuning word geaktiveer deur die "--eksperimentele-toestemming"-vlag te spesifiseer wanneer dit loop. In die aanvanklike implementering is opsies voorgestel om skryf- (--laat-fs-skryf) en lees- (-laat-toe-fs-lees) toegang tot sekere dele van die FS, kinderprosesse (--laat-kind-proses) te beperk. , byvoegings (--geen-byvoegings) en drade (--laat-werker). Byvoorbeeld, om toe te laat om na die /tmp-gids te skryf en die /home/index.js-lêer te lees, kan jy spesifiseer: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indeks .js

    Om toegang na te gaan, word voorgestel om die process.permission.has() metode te gebruik, byvoorbeeld, "process.permission.has('fs.write',"/tmp/test").

  • Hanteerders vir ECMAScript eksterne modules (ESM's) wat via die "--eksperimentele-laaier" opsie gelaai word, word nou uitgevoer in 'n aparte draad, geïsoleer van die hoofdraad, wat die kruising van toepassingskode en gelaaide ESM-modules uitskakel. Soortgelyk aan blaaiers, word die import.meta.resolve()-metode nou sinchronies uitgevoer wanneer dit van binne 'n toepassing opgeroep word. In een van die volgende takke van Node.js word beplan om ESM-laaiondersteuning na die kategorie stabiele kenmerke te verskuif.
  • Die node:toets (test_runner) module, wat ontwerp is om JavaScript-toetse te skep en uit te voer wat resultate in TAP (Test Anything Protocol)-formaat gee, is na stabiel geskuif.
  • 'n Afsonderlike prestasiespan is gevorm, wat ter voorbereiding vir die nuwe tak gewerk het om verskeie looptydkomponente te bespoedig, insluitend URL-ontleding, haal() en EventTarget. Byvoorbeeld, die bokoste van die inisialiseer van die EventTarget is gehalveer, die werkverrigting van die URL.canParse() metode is aansienlik verbeter, en die doeltreffendheid van die tydtellers is verbeter. Daarbenewens is die vrystelling van 'n hoëprestasie-URL-ontleder - Ada 2.0, geskryf in C ++, by die samestelling ingesluit.
  • Die ontwikkeling van 'n eksperimentele kenmerk vir die lewering van toepassings in die vorm van 'n enkele uitvoerbare lêer (SEA, Single Executable Applications) is voortgesit. Die skep van 'n uitvoerbare lêer vereis nou die vervanging van 'n blob wat uit 'n JSON-konfigurasielêer gegenereer is (in plaas daarvan om 'n JavaScript-lêer te vervang).
  • Verbeterde Web Crypto API-versoenbaarheid met implementerings van ander projekte.
  • Bygevoeg amptelike ondersteuning vir Windows op ARM64 stelsels.
  • Voortgesette ondersteuning vir WASI (WebAssembly System Interface) uitbreidings vir die skep van selfstandige WebAssembly toepassings. Verwyder die behoefte om 'n spesiale opdragreëlvlag te spesifiseer om WASI-ondersteuning te aktiveer.

Die Node.js-platform kan gebruik word vir beide bedieneronderhoud van webtoepassings en vir die skep van gereelde kliënt- en bedienernetwerkprogramme. Om die funksionaliteit van toepassings vir Node.js uit te brei, is 'n groot versameling modules voorberei, waarin u modules kan vind met die implementering van HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-bedieners en -kliënte, modules vir integrasie met verskeie webraamwerke, WebSocket- en Ajax-hanteerders, DBMS-koppelaars (MySQL, PostgreSQL, SQLite, MongoDB), sjabloonenjins, CSS-enjins, implementering van kripto-algoritmes en magtigingstelsels (OAuth), XML-ontleders.

Om die verwerking van 'n groot aantal parallelle versoeke te verseker, gebruik Node.js 'n asynchrone kode-uitvoeringsmodel gebaseer op nie-blokkerende gebeurtenishantering en die definisie van terugbelhanteerders. Ondersteunde metodes vir multipleksing van verbindings is epoll, kqueue, /dev/poll, en select. Vir verbindingsmultipleksing word die libuv-biblioteek gebruik, wat 'n byvoeging is vir libev op Unix-stelsels en IOCP op Windows. Die libeio-biblioteek word gebruik om 'n draadpoel te skep, en c-ares is geïntegreer om DNS-navrae in nie-blokkerende modus uit te voer. Alle stelseloproepe wat blokkering veroorsaak, word binne die draadpoel uitgevoer en dra dan, soos seinhanteerders, die resultaat van hul werk terug deur 'n naamlose pyp (pyp). Die uitvoering van JavaScript-kode word verskaf deur die gebruik van die V8-enjin wat deur Google ontwikkel is (daarby ontwikkel Microsoft 'n weergawe van Node.js met die Chakra-Core-enjin).

In sy kern is Node.js soortgelyk aan die Perl AnyEvent, Ruby Event Machine, Python Twisted-raamwerke en die Tcl-gebeurtenisimplementering, maar die gebeurtenislus in Node.js is weggesteek vir die ontwikkelaar en lyk soos gebeurtenishantering in 'n webtoepassing wat loop in blaaier. Wanneer u toepassings vir node.js skryf, moet u die besonderhede van gebeurtenisgedrewe programmering oorweeg, byvoorbeeld, in plaas daarvan om "var result = db.query("select..");" te doen. met wag vir voltooiing van werk en daaropvolgende verwerking van resultate, gebruik Node.js die beginsel van asynchrone uitvoering, m.a.w. die kode word getransformeer na "db.query("selekteer..", funksie (resultaat) {resultaatverwerking});", waarin beheer onmiddellik na verdere kode sal oorgaan, en die navraagresultaat sal verwerk word soos data aankom.

Bron: opennet.ru

Voeg 'n opmerking