Ilmus Node.js 20.0, JavaScript-i võrgurakenduste käitamise platvorm. Node.js 20.0 kuulub pikaajalise toe harude alla, kuid see staatus omistatakse alles oktoobris pärast stabiliseerimist. Node.js 20.x toetamine kestab kuni 30. aprill 2026. Eelmise LTS-haru Node.js 18.x tugi kestab kuni aprilli 2025, ning eel-eelmise LTS-haru 16.x kuni septembri 2023. LTS-haru 14.x tugi lõppeb 30. aprillil ning vahepealse haru Node.js 19.x tugi lõppeb 1. juunil.
Peamised parandused:
- V8 mootor on uuendatud versioonile 11.3, mida kasutatakse Chromiumis 113. Muudatused võrreldes Node.js 19 haruga, kus kasutati Chromium 107 mootorit, hõlmavad funktsioone String.prototype.isWellFormed ja toWellFormed, Array.prototype ja TypedArray.prototype meetodeid muudetud Array ja TypedArray objektidega töötamiseks, lipu «v» kasutamist RegExp-is, ArrayBufferi suuruse muutmise toetust ja SharedArrayBufferi suuruse suurendamist, samuti taha-kutsumise rekursiooni (tail-call) WebAssembly-s.
- Предложен экспериментальный механизм 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
Ligipääsu kontrollimiseks soovitatakse kasutada meetodit process.permission.has(), näiteks «process.permission.has(‘fs.write’,»/tmp/test»).
- ECMAScript (ESM) välimoodulite töötlejad, mis laaditakse läbi valiku „—experimental-loader”, käivitatakse nüüd eraldi lõimes, mis on isoleeritud põhivoolust, vältides rakenduste ja laaditud ESM-moodulite koodi kokkupõrget. Sarnaselt brauseritega toimub import.meta.resolve() meetodi kutsumine rakendusest nüüd sünkroonrežiimis. Ühes järgnevates Node.js harudes kavatsetakse ESM-i laadimise toe üle viia stabiilsete võimaluste hulka.
- Stabiilseks on muudetud moduli node:test (test_runner), mis on mõeldud JavaScriptis testide loomiseks ja käivitamiseks, tagastades tulemuse TAP (Test Anything Protocol) formaadis.
- On loodud eraldi arendajate meeskond, mis vastutab jõudluse optimeerimise eest. Uue oksa ettevalmistamisel tehti tööd erinevate runtime-komponentide, sealhulgas URL-i analüüsi, fetch() ja EventTargeti kiirendamise nimel. Näiteks on EventTargeti algatamise kulud vähenenud kaks korda, method URL.canParse() jõudlus on oluliselt paranenud ning ajastite töö efektiivsus on suurenenud. Lisaks on released kõrge jõudlusega URL-analüsaator — Ada 2.0, mis on kirjutatud keeles C++.
- Eksperimentaalse võimaluse arendamine üksiku täidisega rakenduste (SEA, Single Executable Applications) tarnimiseks on jätkunud. Täidise loomine nõuab nüüd JSON-formaadis konfiguratsioonifaili põhjal genereeritud blob'i asendust (JavaScripti faili asendamise asemel).
- Web Crypto API ühilduvust on parandatud teiste projektide rakendustega.
- Lisatud ametlik tugi Windowsi süsteemidele ARM64 arhitektuuris.
- WASI (WebAssembly System Interface) laienduste toe rakendamine on jätkuvalt aktiivne, et luua isoleeritud WebAssembly rakendusi. Erilise käsurea lipu määramise vajadus WASI toe aktiveerimiseks on eemaldatud.
Node.js platvormi saab kasutada nii veebirakenduste serveripoolses toetuses kui ka tavapäraste kliendi- ja serveripoolsete võrguprogrammide loomiseks. Node.js rakenduste funktsionaalsuse laiendamiseks on koostatud suur moodulite kogu, kust leiate moodulid HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klientide rakendamiseks. serverite Lisaks on saadaval moodulid erinevate veebiraamistikest integreerimiseks, WebSocketi ja Ajax töötlejate, andmebaasi ühenduse moodulite (MySQL, PostgreSQL, SQLite, MongoDB), templaatide, CSS-mootorite, krüptoalgoritmide ja autoriseerimissüsteemide (OAuth), XML-parside rakendusteks.
Node.js kasutab paljude paralleelsete päringute töötlemiseks asünkroonset koodikäitlusmudelit, mille aluseks on sündmuste mittesüvendav töötlemine ja tagasikutsumiste määramine. Ühenduste multiplexerimiseks toetatakse selliseid meetodeid nagu epoll, kqueue, /dev/poll ja select. Ühenduste multiplexerimiseks kasutatakse libuv raamatukogu, mis on Unix-süsteemides libev ja Windowsis IOCP. Töötajate basaari (thread pool) loomiseks kasutatakse libeio raamatukogu ning mittesüvendav DNS-päringute töötlemine on integreeritud c-ares'iga. Kõik süsteemi kutsed, mis võivad blokeeruda, täidetakse töötajate basaari sees ja seejärel, nagu ka signaalide töötlejad, edastavad oma töö tulemuse tagasi anonüümsesse torusse (pipe). JavaScripti koodi täitmine tagatakse Google'i loodud V8 mootori kaasamise kaudu (täpsemalt arendab Microsoft Node.js varianti Chakra-Core mootoriga).
Node.js on teatud mõttes sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted ja Tcl-i sündmustepõhiste rakendustega, kuid Node.js-i sündmuste töötlemise tsükkel (event loop) on arendaja eest varjatud ning sarnaneb veebirakenduse sündmuste töötlemisega, mis töötab brauseris. Node.js-i rakenduste kirjutamisel tuleb arvestada sündmustepõhise programmeerimise eripäradega. Näiteks, selle asemel et teostada "var result = db.query('select..');" ja oodata tulemuste töötlemise lõpetamist, kasutatakse Node.js-is asünkroonse täitmise põhimõtet, st kood muutub "db.query('select..', function (result) {töötle tulemus});", kus juhtimine läheb kohe edasi järgmisele koodile ja päringu tulemus töödeldakse andmete saabumise ajal.
Allikas: opennet.ru
