Jukwaa la JavaScript la upande wa seva Node.js 20.0 linapatikana

Node.js 20.0 ilitolewa, jukwaa la kuendesha programu za mtandao katika JavaScript. Node.js 20.0 imeainishwa kama tawi la usaidizi la muda mrefu, lakini hali hii itawekwa mnamo Oktoba pekee, baada ya uimarishaji. Node.js 20.x itatumika hadi tarehe 30 Aprili 2026. Urekebishaji wa tawi la awali la LTS la Node.js 18.x litaendelea hadi Aprili 2025, na lile la kabla ya tawi la mwisho la LTS 16.x hadi Septemba 2023. Tawi la 14.x LTS litakomeshwa tarehe 30 Aprili, na tawi la Node.js 19.x litakomeshwa tarehe 1 Juni.

Maboresho kuu:

  • Injini ya V8 imesasishwa hadi toleo la 11.3, linalotumika katika Chromium 113. Mabadiliko yakilinganishwa na tawi la Node.js 19, ambalo lilitumia injini ya Chromium 107, ni pamoja na vitendaji vya String.prototype.isWellFormed na toWellFormed, Array.prototype na TypedArray. mbinu za mfano za kufanya kazi na nakala wakati wa kubadilisha vitu vya Array na TypedArray, bendera ya "v" katika RegExp, msaada wa kubadilisha ukubwa wa ArrayBuffer na kuongeza ukubwa wa SharedArrayBuffer, kurudi nyuma kwa mkia (tail-call) katika WebAssembly.
  • Mbinu ya majaribio ya Muundo wa Ruhusa imependekezwa ambayo inaruhusu kuzuia ufikiaji wa rasilimali fulani wakati wa utekelezaji. Usaidizi wa Muundo wa Ruhusa umewashwa kwa kubainisha alama ya "--ruhusa-ya-majaribio" unapoendesha. Utekelezaji wa awali unatoa chaguzi za kuzuia uandishi (--allow-fs-write) na kusoma (--allow-fs-read) ufikiaji wa sehemu fulani za mfumo wa faili, michakato ya mtoto (--allow-child-process), na nyongeza (--no-addons) ) na nyuzi (--allow-worker). Kwa mfano, kuruhusu uandishi kwa saraka ya /tmp na kusoma faili /home/index.js, unaweza kubainisha: nodi β€”experimental-permission β€”allow-fs-write=/tmp/ β€”allow-fs-read=/home /index.js index .js

    Ili kuangalia ufikiaji, inapendekezwa kutumia mbinu ya process.permission.has(), kwa mfano, "process.permission.has('fs.write',"/tmp/test").

  • Vidhibiti vya Moduli ya Nje ya ECMAScript (ESM) iliyopakiwa kupitia chaguo la "--experimental-loader" sasa inaendeshwa kwa uzi tofauti, uliotengwa na uzi mkuu, ukiondoa makutano ya msimbo wa programu na moduli za ESM zilizopakiwa. Sawa na vivinjari, mbinu ya import.meta.resolve() sasa inatekelezwa kwa usawa inapoitwa kutoka kwa programu. Katika mojawapo ya matawi yanayofuata ya Node.js, usaidizi wa upakiaji wa ESM umepangwa kuhamishiwa kwenye kitengo cha vipengele vilivyo imara.
  • Moduli nodi:test (test_runner), iliyoundwa kwa ajili ya kuunda na kuendesha majaribio katika JavaScript ambayo inaleta matokeo katika umbizo la TAP (Test Anything Protocol), imefanywa kuwa thabiti.
  • Timu tofauti ya uendelezaji iliundwa kuwajibika kwa uboreshaji wa utendakazi, ambayo, wakati wa kuandaa tawi jipya, ilifanya kazi ili kuongeza kasi ya vipengele mbalimbali vya wakati wa utekelezaji, ikiwa ni pamoja na uchanganuzi wa URL, fetch() na EventTarget. Kwa mfano, sehemu ya juu ya uanzishaji wa EventTarget imepunguzwa kwa nusu, utendakazi wa mbinu ya URL.canParse() umeboreshwa kwa kiasi kikubwa, na ufanisi wa vipima muda umeboreshwa. Inajumuisha pia kutolewa kwa kichanganuzi cha utendaji wa juu cha URL, Ada 2.0, kilichoandikwa katika C++.
  • Ukuzaji wa uwezo wa majaribio wa kuwasilisha maombi katika mfumo wa faili moja inayoweza kutekelezwa (SEA, Programu Moja Zinazoweza Kutekelezwa) uliendelea. Kuunda faili inayoweza kutekelezwa sasa kunahitaji kubadilisha blob inayozalishwa kutoka kwa faili ya usanidi katika umbizo la JSON (badala ya kubadilisha faili ya JavaScript).
  • Upatanifu ulioboreshwa wa API ya Crypto Web na utekelezaji kutoka kwa miradi mingine.
  • Imeongeza usaidizi rasmi wa Windows kwenye mifumo ya ARM64.
  • Utekelezaji wa usaidizi wa viendelezi vya WASI (WebAssembly System Interface) kwa ajili ya kuunda programu za WebAssembly za kusimama pekee umeendelea. Imeondoa hitaji la kutaja bendera maalum ya mstari wa amri ili kuwezesha usaidizi wa WASI.

Jukwaa la Node.js linaweza kutumika kwa usaidizi wa upande wa seva wa programu za Wavuti, na kwa kuunda programu za mtandao za mteja na seva. Ili kupanua utendakazi wa programu za Node.js, mkusanyiko mkubwa wa moduli umeandaliwa, ambayo unaweza kupata moduli na utekelezaji wa HTTP, SMTP, XMPP, DNS, FTP, IMAP, seva za POP3 na wateja, moduli za ujumuishaji. yenye mifumo mbalimbali ya wavuti, vidhibiti vya WebSocket na Ajax , viunganishi vya DBMS (MySQL, PostgreSQL, SQLite, MongoDB), injini za violezo, injini za CSS, utekelezaji wa algoriti za kriptografia na mifumo ya uidhinishaji (OAuth), vichanganuzi vya XML.

Ili kushughulikia idadi kubwa ya maombi sawia, Node.js hutumia muundo wa utekelezaji wa msimbo usiolingana kulingana na uchakataji wa tukio lisilozuia na kufafanua vidhibiti vya urejeshaji simu. Mbinu zinazotumika za miunganisho ya kuzidisha ni pamoja na epoll, kqueue, /dev/poll, na select. Kwa uunganisho wa kuzidisha, maktaba ya libuv hutumiwa, ambayo ni nyongeza ya libev kwenye mifumo ya Unix na kwa IOCP kwenye Windows. Maktaba ya libeio inatumiwa kuunda mkusanyiko wa nyuzi, na c-ares imeunganishwa kutekeleza hoja za DNS katika hali isiyozuia. Simu zote za mfumo zinazosababisha kuzuia hutekelezwa ndani ya dimbwi la nyuzi kisha, kama vidhibiti vya mawimbi, hupitisha matokeo ya kazi yao kupitia bomba lisilo na jina. Utekelezaji wa msimbo wa JavaScript unahakikishwa kupitia matumizi ya injini ya V8 iliyotengenezwa na Google (kwa kuongeza, Microsoft inatengeneza toleo la Node.js kwa injini ya Chakra-Core).

Kwa msingi wake, Node.js ni sawa na Perl AnyEvent, Ruby Event Machine, mifumo ya Python Twisted na utekelezaji wa matukio katika Tcl, lakini kitanzi cha tukio katika Node.js kimefichwa kutoka kwa msanidi programu na kinafanana na usindikaji wa tukio katika programu ya wavuti. inayoendesha katika kivinjari. Wakati wa kuandika programu za node.js, ni muhimu kuzingatia mahususi ya programu inayoendeshwa na tukio, kwa mfano, badala ya kufanya "var result = db.query("chagua..");" kwa kusubiri kukamilika kwa kazi na usindikaji unaofuata wa matokeo, Node.js hutumia kanuni ya utekelezaji wa asynchronous, i.e. msimbo hubadilishwa kuwa "db.query("chagua..", chaguo la kukokotoa (matokeo) {uchakataji wa matokeo});", ambapo udhibiti utapita mara moja hadi kwenye msimbo zaidi, na matokeo ya hoja yatachakatwa data inapowasili.

Chanzo: opennet.ru

Kuongeza maoni