Inilabas ang Node.js 22.0, isang platform para sa pagpapatakbo ng mga network application sa JavaScript. Ang Node.js 22.0 ay inuri bilang isang pangmatagalang sangay ng suporta, ngunit ang status na ito ay itatalaga lamang sa Oktubre, pagkatapos ng pag-stabilize. Ang Node.js 22.x ay susuportahan hanggang Abril 30, 2027. Ang pagpapanatili ng nakaraang LTS branch ng Node.js 20.x ay tatagal hanggang Abril 2026, at ang taon bago ang huling LTS branch 18.x hanggang Abril 2025. Ang staging branch ng Node.js 21.x ay ihihinto sa Hunyo 1, 2024.
Mga pangunahing pagpapabuti:
- Ang V8 engine ay na-update sa bersyon 12.4, na ginamit sa Chromium 124. Kabilang sa mga pagbabago kumpara sa Node.js 21 branch, na gumamit ng V8 11.8 engine), ito ay nabanggit:
- Suporta para sa extension ng WasmGC, na pinapasimple ang pag-port ng mga program na nakasulat sa mga programming language na gumagamit ng garbage collector (Kotlin, PHP, Java, atbp.) sa WebAssembly. Nagdaragdag ang WasmGC ng mga bagong uri ng mga istruktura at array na maaaring gumamit ng non-linear na paglalaan ng memorya.
- Suporta para sa Array.fromAsync() na paraan, na asynchronous na nagbabalik ng bagong instance ng Array object na kinopya mula sa array-like, iterable o async iterable object.
- Suporta para sa mga pamamaraan ng iterator gaya ng .map, .filter, .find, .take, .drop, .forEach at .reduce.
- Suporta para sa isang Set object na tumutukoy sa isang koleksyon ng mga halaga at nag-aalok ng mga pamamaraan na nagpapatupad ng mga karaniwang operasyon ng set, tulad ng intersection, unyon, pagkakaiba, at karagdagan.
- Ang Maglev na nag-optimize ng JIT compiler ay pinagana bilang default, na naglalayong mabilis na makabuo ng mataas na pagganap ng machine code para sa mabigat na ginagamit na JavaScript code. Ang pagpapagana ng Maglev ay maaaring makabuluhang mapabilis ang panandaliang mga aplikasyon ng CLI na hindi nagsasagawa ng mga pangmatagalang operasyon, halimbawa, ang oras upang makumpleto ang pagsubok sa Jetstrea ay nababawasan ng 7.5%, at ang pagsubok sa Speedometer ng 5%.
- Ang pagtatrabaho sa mga stream ay pinabilis sa pamamagitan ng pagtaas ng halaga ng opsyon na highWaterMark mula 16 KB hanggang 65 KB (tinutukoy ang limitasyon hanggang sa kung saan ang pag-record ay buffer). Ang pagbabago ay nagreresulta sa pagtaas ng pagkonsumo ng memory, kaya ang mga application na idinisenyo upang tumakbo sa limitadong RAM ay maaaring kailanganing bumalik sa lumang halaga sa pamamagitan ng isang tawag sa setDefaultHighWaterMark().
- Pinahusay na pagganap ng mga API ng fetch() at test runner sa pamamagitan ng paggawang mas mahusay ang instantiation ng AbortSignal. Ang pagganap ng mga API na nauugnay sa kasabay na trabaho sa mga file system ay napabuti.
- Isang pang-eksperimentong tampok ang ibinigay upang magamit ang "require()" na tawag upang i-load ang JavaScript ESM modules (ECMAScript Modules) sa synchronous mode. Ginagamit ang mga ESM module sa mga browser at pinapalitan ang mga module ng CommonJS na partikular sa Node.js. Upang mag-load sa pamamagitan ng "require()", ang ESM module ay dapat isagawa sa synchronous mode (nang hindi naghihintay sa pinakamataas na antas). Pinagana ang suporta sa pamamagitan ng flag na "--experimental-require-module".
- Nagdagdag ng kakayahang pang-eksperimentong magpatakbo ng mga script na tinukoy sa package.json file gamit ang command na "--run". "
- Ang command na “node –watch” ay inilipat sa stable na kategorya na may pagpapatupad ng watch mode na nagsisiguro na ang proseso ay magre-restart kapag ang na-import na file ay nagbago (halimbawa, kung ang “node –watch index.js” ay naisakatuparan, ang awtomatikong magre-restart ang proseso kapag nagbago ang index.js).
- Ang katutubong pagpapatupad ng WebSocket API ay na-stabilize, na nagpapahintulot sa WebSocket na magamit sa client mode nang hindi nag-i-install ng mga karagdagang dependency.
- Nagdagdag ng bahagyang suporta para sa Navigator API.
- Ang Webstreams API ay nagdagdag ng suporta para sa deflate-raw na format ng compression.
- Nagdagdag ng mga function ng glob at globSync sa node:fsmodule para sa pagtutugma ng pattern ng mga path ng file.
- Pinahusay na pangangasiwa ng mga maling na-configure na IPv6 stack. Ipinatupad ang Happy Eyeballs algorithm para sa mabilis na rollback sa kaso ng mga problema sa IPv6 operation.
- Ang util API ay hindi na ginagamit.
- Mga na-update na bersyon ng dependency: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson hanggang 3.8.0, ada 2.7.7 at undici 6.6.0 .
Ang platapormang Node.js ay maaaring gamitin kapwa para sa suporta sa server-side ng mga web application at para sa paglikha ng mga karaniwang programa sa network para sa client at server-side. Upang mapalawak ang paggana ng mga aplikasyon ng Node.js, isang malaking koleksyon ng mga module ang inihanda, kabilang ang mga nagpapatupad mga server at mga kliyente ng HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, mga module para sa integrasyon sa iba't ibang web framework, mga handler ng WebSocket at Ajax, mga konektor sa DBMS (MySQL, PostgreSQL, SQLite, MongoDB), mga template engine, mga CSS engine, mga implementasyon ng mga cryptographic algorithm at mga authorization system (OAuth), mga XML parser.
Upang mahawakan ang malaking bilang ng mga parallel na kahilingan, gumagamit ang Node.js ng isang modelo ng asynchronous na code execution batay sa hindi naka-block na pagproseso ng kaganapan at pagtukoy ng mga callback handler. Kasama sa mga sinusuportahang paraan para sa multiplexing na koneksyon ang epoll, kqueue, /dev/poll, at piliin. Para sa multiplexing ng koneksyon, ginagamit ang libuv library, na isang add-on sa libev sa mga Unix system at sa IOCP sa Windows. Ang libeio library ay ginagamit upang lumikha ng thread pool, at ang c-ares ay isinama upang magsagawa ng mga query sa DNS sa isang non-blocking mode. Ang lahat ng mga tawag sa system na nagdudulot ng pagharang ay isinasagawa sa loob ng thread pool at pagkatapos, tulad ng mga humahawak ng signal, ipapasa muli ang resulta ng kanilang trabaho sa isang hindi pinangalanang pipe.
Ang pagpapatupad ng JavaScript code ay sinisiguro sa pamamagitan ng paggamit ng V8 engine na binuo ng Google (bilang karagdagan, ang Microsoft ay gumagawa ng isang bersyon ng Node.js gamit ang Chakra-Core engine). Sa kaibuturan nito, ang Node.js ay katulad ng Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks at ang pagpapatupad ng mga kaganapan sa Tcl, ngunit ang event loop sa Node.js ay nakatago mula sa developer at kahawig ng pagproseso ng kaganapan sa isang web application tumatakbo sa browser.
Pinagmulan: opennet.ru
