Servilflanka JavaScript-platformo Node.js 21.0 havebla

Node.js 21.0 estis publikigita, platformo por ruli retajn aplikojn en JavaScript. La branĉo Node.js 21.0 estos subtenata dum 6 monatoj. En la venontaj tagoj, la stabiligo de la branĉo Node.js 20 estos kompletigita, kiu ricevos LTS-statuson kaj estos subtenata ĝis aprilo 2026. Prizorgado de la antaŭa LTS-filio de Node.js 18.0 daŭros ĝis septembro 2025, kaj la jaron antaŭ la lasta LTS-filio 16.0 ĝis aprilo 2024.

Ĉefaj plibonigoj:

  • La Fetch API estis deklarita stabila, dizajnita por ŝarĝi rimedojn tra la reto kaj simpligi la skribadon de universala JavaScript-kodo taŭga por labori ĉe la servilo kaj kliento flankoj. La efektivigo baziĝas sur kodo de la kliento HTTP/1.1 undici kaj estas kiel eble plej proksima al la simila API provizita en retumiloj. La API inkluzivas la metodon fetch() kaj objektojn Headers. Peto kaj Respondo, reprezentante la HTTP-kapojn, peton kaj respondon. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = atendi res.json (); console.log(datenoj); }
  • Subteno por la WebStreams API, kiu disponigas aliron al datumfluoj ricevitaj tra la reto, estis stabiligita. La API ebligas aldoni viajn proprajn traktilojn, kiuj funkcias kun datumoj, kiam informoj alvenas tra la reto, sen atendi ke la tuta dosiero estos elŝutita. Objektoj disponeblaj en Node.js inkluzivas ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream kaj DecompressionStream.
  • Aldonita eksperimenta efektivigo de WebSocket-kliento, kongrua kun retumiloj. Por ebligi WebSocket-subtenon, la flago "--experimental-websocket" estas provizita.
  • Aldonita eksperimenta reĝimo por uzi la defaŭltan efektivigon de JavaScript-moduloj ESM (ECMAScript Modules, uzata en moduloj por retumiloj) anstataŭ CommonJS (specifa al Node.js). La ŝanĝo ne influas modulojn, kies formato estas eksplicite difinita per la kampo "tipo" en package.json, specifita per la flago "--input-type", aŭ estas evidenta pro la dosier-etendaĵo (.mjs por ESM, .cjs). por CommonJS). Tamen, moduloj kiuj ne estas eksplicite difinitaj kiel CommonJS (ekzemple, havas ".js" etendon) estos traktataj kiel ESM-moduloj kiam la nova reĝimo estas ebligita. Por aktivigi novajn modulajn agordojn, la flago "--experimental-default-type" estis proponita.
  • La V8-motoro estis ĝisdatigita al versio 11.8, uzita en Chromium 118, kiu nun apogas la ArrayBuffer.prototype.transfer-metodon, la kapablon grupigi tabelojn (groupBy-metodo) kaj WebAssembly-instrukciojn por prilaborado de konstantoj (i32.add, i32.sub, i32.mul, i64 .add, i64.sub kaj i64.mul).
  • Subteno por la globalPreload-traktilo estis nuligita, favore al registri kaj pravalorigi vokojn por agordi modulojn.
  • Opcio "flush" estis aldonita al la fs.writeFile-funkcio por devigi datumojn esti fluitaj al la stirado post ĉiu skriboperacio.
  • Plibonigita rendimento de kodo rilata al URL-analizo, preni API, fluoj, nodo:fs kaj HTTP.
  • Aldonita tutmonda navigilo objekto. Ekzemple, por akiri datumojn pri la nombro da CPU-kernoj, vi povas uzi la posedaĵon navigator.hardwareConcurrency.
  • En la parametro "—testo", subteno por globmaskoj estis aldonita por elekti testojn por ruli (ekzemple, vi povas specifi "—test **/*.test.js.").
  • La pakaĵa administranto de pakaĵoj npm 10.2.0 kaj la analizilo llhttp 9.1.2 estis ĝisdatigitaj.
  • Subteno por Visual Studio 2019 kaj versioj de macOS pli malnovaj ol 11.0 estis nuligitaj.

La platformo Node.js povas esti uzata kaj por servila prizorgado de Retaj aplikaĵoj kaj por krei regulajn programojn pri kliento kaj servilo. Por vastigi la funkciecon de aplikoj por Node.js, granda kolekto de moduloj estis preparita, en kiuj vi povas trovi modulojn kun la efektivigo de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-serviloj kaj klientoj, moduloj por integriĝo. kun diversaj retkadroj, WebSocket kaj Ajax-traktiloj, DBMS-konektiloj (MySQL, PostgreSQL, SQLite, MongoDB), ŝablonaj motoroj, CSS-motoroj, efektivigoj de kriptaj algoritmoj kaj rajtigaj sistemoj (OAuth), XML-analiziloj.

Por certigi la prilaboradon de granda nombro da paralelaj petoj, Node.js uzas nesinkronan kodan ekzekutmodelon bazitan sur ne-bloka evento-traktado kaj la difino de revokaj pritraktiloj. Subtenataj metodoj por multipleksaj konektoj estas epoll, kqueue, /dev/poll, kaj select. Por koneksa multipleksado, la biblioteko libuv estas uzata, kiu estas aldonaĵo por libev ĉe Unikso-sistemoj kaj IOCP ĉe Vindozo. La biblioteko libeio estas uzata por krei fadenan naĝejon, kaj c-ares estas integrita por fari DNS-demandojn en ne-bloka reĝimo. Ĉiuj sistemvokoj kiuj kaŭzas blokadon estas ekzekutitaj ene de la fadena naĝejo kaj tiam, kiel signaltraktantoj, translokigas la rezulton de sia laboro reen tra nenomita pipo (pipo). La ekzekuto de JavaScript-kodo estas provizita per la uzo de la V8-motoro evoluigita de Guglo (krome, Microsoft disvolvas version de Node.js kun la Chakra-Core-motoro).

En ĝia kerno, Node.js estas simila al la Perl AnyEvent, Ruby Event Machine, Python Twisted kadroj, kaj la Tcl-okazaĵefektivigo, sed la eventa buklo en Node.js estas kaŝita de la programisto kaj similas evento-traktadon en TTT-aplikaĵo funkcianta. en retumilo. Kiam vi verkas aplikaĵojn por node.js, vi devas konsideri la specifaĵojn de okazaĵa programado, ekzemple, anstataŭ fari "var result = db.query ("select..");" kun atendado de fino de laboro kaj posta prilaborado de rezultoj, Node.js uzas la principon de nesinkrona ekzekuto, t.e. la kodo estas transformita en "db.query ("elekto..", funkcio (rezulto) {rezulta prilaborado});", en kiu kontrolo tuj pasos al plia kodo, kaj la demandrezulto estos prilaborita kiam datumoj alvenas.

fonto: opennet.ru

Aldoni komenton