Izvlečena je Node.js 20.0, platforma za izvođenje mrežnih aplikacija u programskom jeziku JavaScript. Node.js 20.0 se svrstava među grane s dugoročnom podrškom, ali će ovaj status biti dodeljen tek u oktobru, nakon stabilizacije. Podrška za Node.js 20.x će biti omogućena do 30. aprila 2026. godine. Održavanje prethodne LTS grane Node.js 18.x trajaće do aprila 2025. godine, a pretprethodne LTS grane 16.x do septembra 2023. godine. Održavanje LTS grane 14.x biće obustavljeno 30. aprila, a privremene grane Node.js 19.x 1. juna.
Glavne izboljšave:
- V8 motor je ažuriran na verziju 11.3, koja se koristi u Chromium 113. Iz promena u odnosu na granu Node.js 19, u kojoj je korišćen Chromium 107, ističu se funkcije String.prototype.isWellFormed i toWellFormed, metode Array.prototype i TypedArray.prototype za rad s kopijom prilikom izmene objekata Array i TypedArray, oznaka 'v' u RegExp, podrška za promenu veličine ArrayBuffer i povećanje veličine SharedArrayBuffer, kao i repna rekurzija u WebAssembly.
- Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js
Za proveru pristupa preporučuje se koristiti metodu process.permission.has(), na primer, 'process.permission.has("fs.write", "/tmp/test")'.
- Obraditelji spoljnjih ECMAScript (ESM) modula, učitani putem opcije '--experimental-loader', sada se izvršavaju u zasebnom niti koja je izolovana od glavne niti, što isključuje preklapanje koda aplikacija i učitanih ESM modula. Po uzoru na pretraživače, metoda import.meta.resolve() prilikom pozivanja iz aplikacije sada se izvršava u sinhronom režimu. U jednoj od narednih grana Node.js planira se prebacivanje podrške za učitavanje ESM u kategoriju stabilnih mogućnosti.
- U grupu stabilnih uveden je modul node:test (test_runner), namenjen za kreiranje i pokretanje testova u programskom jeziku JavaScript, koji vraćaju rezultate u TAP (Test Anything Protocol) formatu.
- Formiran je poseban tim developera zadužen za optimizaciju performansi, koji je prilikom pripreme nove grane radio na ubrzanju raznih runtime komponenti, uključujući parsiranje URL-a, fetch() i EventTarget. Na primer, troškovi prilikom inicijalizacije EventTarget su smanjeni na polovinu, značajno je poboljšana efikasnost metode URL.canParse(), kao i učinak tajmera. Osim toga, u sastav je uključeno izdanje visokoperformantnog parsera URL-a — Ada 2.0, napisanog u C++ jeziku.
- Nadal se razvija eksperimentalna funkcionalnost za isporuku aplikacija u obliku jedne izvršne datoteke (SEA, Single Executable Applications). Kreiranje izvršne datoteke sada zahteva zamenu blob-a, formiranog na osnovu konfiguracione datoteke u JSON formatu (umesto zamene JavaScript datoteke).
- Poboljšana je kompatibilnost API-ja Web Crypto sa implementacijama iz drugih projekata.
- Dodata je zvanična podrška za Windows na ARM64 sistemima.
- Nastavlja se implementacija podrške za ekstenzije WASI (WebAssembly System Interface) za kreiranje izolovanih WebAssembly aplikacija. Uklonjena je potreba za navođenjem posebne komande putem komandne linije za aktivaciju podrške za WASI.
Platforma Node.js se lahko uporablja tako za strežniško spremljanje delovanja spletnih aplikacij kot tudi za ustvarjanje običajnih odjemalskih in strežniških omrežnih programov. Za razširitev funkcionalnosti aplikacij za Node.js je pripravljena obsežna zbirka modulov, v kateri lahko najdete module z implementacijo. strežnikov i HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klijenata, module za integraciju sa raznim web okvirima, WebSocket i Ajax obradi, konektore za baze podataka (MySQL, PostgreSQL, SQLite, MongoDB), predloške, CSS motore, implementacije kriptoalgoritama i sistema autorizacije (OAuth), XML parsera.
Za obradnjo velikega števila vzporednih zahtevkov Node.js uporablja asinhroni model izvajanja kode, ki temelji na obdelavi dogodkov v neblokirnem načinu in določanju callback obdelovalcev. Kot načine multiplexiranja povezav podpira metode, kot so epoll, kqueue, /dev/poll in select. Za multiplexiranje povezav se uporablja knjižnica libuv, ki je nadgradnja nad libev v sistemih Unix in nad IOCP v Windows. Za ustvarjanje sklada niti (thread pool) se uporablja knjižnica libeio, za izvedbo DNS zahtevkov v neblokirnem načinu pa je integriran c-ares. Vsi sistemski klici, ki povzročajo blokado, se izvajajo v okviru sklada niti in nato, tako kot obdelovalci signalov, rezultat svojega dela pošljejo nazaj prek anonimne cevi (pipe). Izvajanje JavaScript kode omogoča vključen motor V8, ki ga je razvilo podjetje Google (dodatno Microsoft razvija različico Node.js z motorjem Chakra-Core).
Po svoji naravi je Node.js podoben okvirjem Perl AnyEvent, Ruby Event Machine, Python Twisted in izvedbi dogodkov v Tcl, vendar je cikel obdelave dogodkov (event loop) v Node.js skrit pred razvijalcem in spominja na obdelavo dogodkov v spletni aplikaciji, ki deluje v brskalniku. Pri pisanju aplikacij za Node.js je potrebno upoštevati posebnosti programiranja, usmerjenega na dogodke; na primer, namesto izvajanja 'var result = db.query('select..');' z čakanjem na zaključek dela in nadaljnjo obdelavo rezultatov, Node.js uporablja načelo asinhronega izvajanja, torej se koda preoblikuje v 'db.query('select..', function (result) {obdelava rezultata});', pri čemer se nadzor takoj prenese na nadaljnjo kodo, rezultat poizvedbe pa se obdeluje ob prihodu podatkov.
Izvor: opennet.ru
