Available ang server-side na JavaScript platform na Node.js 20.0

Ang paglabas ng Node.js 20.0, isang platform para sa pagpapatupad ng mga aplikasyon ng network sa JavaScript, ay naganap. Ang Node.js 20.0 ay itinalaga sa mahabang sangay ng suporta, ngunit ang status na ito ay hindi itatalaga hanggang Oktubre, pagkatapos ng pag-stabilize. Ang Node.js 20.x ay susuportahan hanggang Abril 30, 2026. Ang pagpapanatili ng nakaraang Node.js 18.x LTS branch ay tatagal hanggang Abril 2025, at ang nakaraang 16.x LTS branch hanggang Setyembre 2023. Ang 14.x LTS branch ay mananatili sa Abril 30, at ang Node.js 19.x na pansamantalang sangay sa Hunyo 1.

Mga pangunahing pagpapabuti:

  • Ang V8 engine ay na-update sa bersyon 11.3, na ginagamit sa Chromium 113. Sa mga pagbabago kumpara sa Node.js 19 branch, na ginamit ang Chromium 107 engine, ang String.prototype.isWellFormed at toWellFormed function, ang Array.prototype at TypedArray.prototype na mga pamamaraan upang gumana sa kopya sa pagbabago ng Array at TypedArray object, "v" flag sa RegExp, suporta para sa pagbabago ng laki ng ArrayBuffer at pagpapalaki ng laki ng SharedArrayBuffer, tail-call sa WebAssembly.
  • Ang isang eksperimental na mekanismo ng Modelong Pahintulot ay iminungkahi na nagbibigay-daan sa iyong paghigpitan ang pag-access sa ilang partikular na mapagkukunan sa panahon ng pagpapatupad. Ang suporta sa Modelong Pahintulot ay pinagana sa pamamagitan ng pagtukoy sa flag na "--experimental-permission" kapag tumatakbo. Sa paunang pagpapatupad, iminungkahi ang mga opsyon na higpitan ang pag-access sa pagsulat (--allow-fs-write) at read (--allow-fs-read) sa ilang bahagi ng FS, mga proseso ng bata (--allow-child-process) , mga add-on (--no-addons ) at mga thread (--allow-worker). Halimbawa, upang payagan ang pagsulat sa /tmp na direktoryo at pagbabasa ng /home/index.js file, maaari mong tukuyin ang: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Upang suriin ang access, iminumungkahi na gamitin ang process.permission.has() na paraan, halimbawa, "process.permission.has('fs.write',"/tmp/test").

  • Ang mga humahawak para sa ECMAScript external modules (ESMs) na na-load sa pamamagitan ng "--experimental-loader" na opsyon ay ginagawa na ngayon sa isang hiwalay na thread, na nakahiwalay sa pangunahing thread, na nag-aalis ng intersection ng application code at nag-load ng ESM modules. Katulad ng mga browser, ang import.meta.resolve() na paraan ay gumagana nang sabay-sabay kapag tinawag mula sa loob ng isang application. Sa isa sa mga susunod na sangay ng Node.js, ang ESM loading support ay binalak na ilipat sa kategorya ng mga stable na feature.
  • Ang node:test (test_runner) module, na idinisenyo upang lumikha at magpatakbo ng mga pagsubok sa JavaScript na nagbabalik ng mga resulta sa TAP (Test Anything Protocol) na format, ay inilipat sa stable.
  • Ang isang hiwalay na pangkat ng pagganap ay nabuo, na, bilang paghahanda para sa bagong sangay, ay nagtrabaho upang pabilisin ang iba't ibang bahagi ng runtime, kabilang ang pag-parse ng URL, fetch() at EventTarget. Halimbawa, ang overhead ng pagsisimula ng EventTarget ay nahati sa kalahati, ang pagganap ng paraan ng URL.canParse() ay makabuluhang napabuti, at ang kahusayan ng mga timer ay napabuti. Bilang karagdagan, ang paglabas ng isang mataas na pagganap na URL parser - Ada 2.0, na nakasulat sa C ++, ay kasama sa komposisyon.
  • Ang pagbuo ng isang pang-eksperimentong tampok para sa paghahatid ng mga application sa anyo ng isang solong executable file (SEA, Single Executable Applications) ay nagpatuloy. Ang paggawa ng isang executable ngayon ay nangangailangan ng pagpapalit ng blob na nabuo mula sa isang JSON configuration file (sa halip na palitan ang isang JavaScript file).
  • Pinahusay na pagiging tugma ng Web Crypto API sa mga pagpapatupad mula sa iba pang mga proyekto.
  • Nagdagdag ng opisyal na suporta para sa Windows sa mga ARM64 system.
  • Patuloy na suporta para sa mga extension ng WASI (WebAssembly System Interface) para sa paglikha ng mga standalone na application ng WebAssembly. Inalis ang pangangailangang tumukoy ng espesyal na flag ng command line para paganahin ang suporta ng WASI.

Ang platform ng Node.js ay maaaring gamitin kapwa para sa pagpapanatili ng server ng mga Web application at para sa paglikha ng mga regular na programa ng network ng kliyente at server. Upang mapalawak ang pag-andar ng mga application para sa Node.js, isang malaking koleksyon ng mga module ang inihanda, kung saan makakahanap ka ng mga module na may pagpapatupad ng HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 server at mga kliyente, mga module para sa pagsasama na may iba't ibang web frameworks, WebSocket at Ajax handler , DBMS connectors (MySQL, PostgreSQL, SQLite, MongoDB), templating engine, CSS engine, pagpapatupad ng crypto algorithm at authorization system (OAuth), XML parsers.

Upang matiyak ang pagpoproseso ng malaking bilang ng mga parallel na kahilingan, ang Node.js ay gumagamit ng isang asynchronous na code execution model batay sa hindi naka-block na pangangasiwa ng kaganapan at ang kahulugan ng mga callback handler. Ang mga sinusuportahang paraan para sa multiplexing na koneksyon ay epoll, kqueue, /dev/poll, at piliin. Para sa multiplexing ng koneksyon, ginagamit ang libuv library, na isang add-on para sa libev sa mga Unix system at IOCP sa Windows. Ginagamit ang libeio library para gumawa ng thread pool, at isinama ang c-ares para magsagawa ng mga DNS query sa non-blocking mode. Ang lahat ng system call na nagdudulot ng pagharang ay isinasagawa sa loob ng thread pool at pagkatapos, tulad ng mga tagapangasiwa ng signal, ilipat ang resulta ng kanilang trabaho pabalik sa pamamagitan ng isang hindi pinangalanang pipe (pipe). Ang execution ng JavaScript code ay ibinibigay sa pamamagitan ng paggamit ng V8 engine na binuo ng Google (bilang karagdagan, ang Microsoft ay bumubuo 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 pagpapatupad ng Tcl event, ngunit ang event loop sa Node.js ay nakatago mula sa developer at kahawig ng event handling sa isang web application na tumatakbo. sa browser. Kapag nagsusulat ng mga application para sa node.js, kailangan mong isaalang-alang ang mga detalye ng programming na hinimok ng kaganapan, halimbawa, sa halip na gawin ang "var result = db.query("select..");" sa paghihintay para sa pagkumpleto ng trabaho at kasunod na pagproseso ng mga resulta, ginagamit ng Node.js ang prinsipyo ng asynchronous execution, i.e. ang code ay binago sa "db.query("select..", function (result) {result processing});", kung saan ang kontrol ay agad na mapapasa sa karagdagang code, at ang resulta ng query ay ipoproseso pagdating ng data.

Pinagmulan: opennet.ru

Magdagdag ng komento