Servilflanka JavaScript-platformo Node.js 20.0 havebla

La liberigo de Node.js 20.0, platformo por ekzekuti retajn aplikojn en JavaScript, okazis. Node.js 20.0 estis asignita al la longa subtena branĉo, sed ĉi tiu statuso ne estos asignita ĝis oktobro, post stabiligo. Node.js 20.x estos subtenata ĝis la 30-a de aprilo 2026. Prizorgado de la antaŭa Node.js 18.x LTS-filio daŭros ĝis aprilo 2025, kaj la antaŭa 16.x LTS-filio ĝis septembro 2023. La 14.x LTS-filio estos konservita la 30-an de aprilo, kaj la provizora branĉo Node.js 19.x la 1-an de junio.

Ĉefaj plibonigoj:

  • La V8-motoro estis ĝisdatigita al versio 11.3, kiu estas uzata en Chromium 113. El la ŝanĝoj kompare kun la Node.js 19 branĉo, kiu uzis la Chromium 107-motoron, la funkciojn String.prototype.isWellFormed kaj toWellFormed, la Array.prototype. kaj TypedArray.prototype metodoj por labori kun kopio sur ŝanĝo de Array kaj TypedArray objektoj, "v" flago en RegExp, subteno por regrandigi ArrayBuffer kaj pliigi la grandecon de SharedArrayBuffer, vosto-voko en WebAssembly.
  • Eksperimenta Permesa Modelo-mekanismo estas proponita, kiu permesas vin limigi aliron al certaj rimedoj dum ekzekuto. Permesa Modelo-subteno estas ebligita specifante la flagon "--experimental-permission" dum funkciado. En la komenca efektivigo, opcioj estis proponitaj por limigi skribon (--allow-fs-write) kaj legi (--allow-fs-read) aliron al certaj partoj de la FS, infanprocezoj (--allow-child-process) , aldonaĵoj (--no-addons ) kaj fadenoj (--allow-worker). Ekzemple, por permesi skribi al la dosierujo /tmp kaj legi la dosieron /home/index.js, vi povas specifi: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indekso .js

    Por kontroli aliron, oni sugestas uzi la metodon process.permission.has(), ekzemple "process.permission.has('fs.write',"/tmp/test").

  • Pritraktiloj por ECMAScript eksteraj moduloj (ESMs) ŝarĝitaj per la "--experimental-loader" opcio nun estas ekzekutitaj en aparta fadeno, izolita de la ĉeffadeno, kiu eliminas la intersekciĝon de aplikaĵokodo kaj ŝarĝitaj ESM-moduloj. Simile al retumiloj, la metodo import.meta.resolve() nun ekzekutas sinkrone kiam vokita de ene de aplikaĵo. En unu el la sekvaj branĉoj de Node.js, ESM-ŝarĝada subteno estas planita esti movita al la kategorio de stabilaj funkcioj.
  • La modulo node:test (test_runner), desegnita por krei kaj ruli JavaScript-testojn, kiuj resendas rezultojn en formato TAP (Test Anything Protocol), estis movita al stabila.
  • Aparta agado-teamo estis formita, kiu, en preparo por la nova branĉo, laboris por akceli diversajn rultempajn komponentojn, inkluzive de URL-analizo, fetch() kaj EventTarget. Ekzemple, la ŝarĝo de pravalorigo de la EventTarget estis duonigita, la rendimento de la metodo URL.canParse() estis signife plibonigita, kaj la efikeco de la tempigiloj estis plibonigita. Krome, la liberigo de alt-efikeca URL-analizilo - Ada 2.0, skribita en C ++, estas inkluzivita en la kunmetaĵo.
  • La evoluo de eksperimenta trajto por liverado de aplikoj en la formo de ununura rulebla dosiero (SEA, Single Executable Applications) daŭris. Krei efektivigeblan nun postulas anstataŭigi blob generitan de JSON-agorda dosiero (anstataŭ anstataŭigi JavaScript-dosieron).
  • Plibonigita Web Crypto API-kongruo kun efektivigoj de aliaj projektoj.
  • Aldonita oficiala subteno por Vindozo sur ARM64-sistemoj.
  • Daŭra subteno por WASI (WebAssembly System Interface) etendaĵoj por kreado de memstaraj WebAssembly-aplikoj. Forigis la bezonon specifi specialan komandlinian flagon por ebligi WASI-subtenon.

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