Izšla je Node.js 21.0, platforma za izvajanje omrežnih aplikacij v jeziku JavaScript. Podpora za različico Node.js 21.0 bo trajala 6 mesecev. V naslednjih dneh bo zaključena stabilizacija različice Node.js 20, ki bo pridobila status LTS in bo podprta do aprila 2026. Podpora prejšnje LTS različice Node.js 18.0 bo trajala do septembra 2025, prejšnje LTS različice 16.0 pa do aprila 2024.
Glavne izboljšave:
- Objavljen je stabilen API Fetch, namenjen nalaganju virov prek omrežja in poenostavljanju pisanja univerzalne JavaScript kode, primerne za delo na strežniški in odjemalski strani. Izvedba temelji na kodi stranke undici iz HTTP/1.1 in je maksimalno podobna podobnemu API-ju, ki ga ponujajo brskalniki. API vsebuje metodo fetch() in objekte Headers, Request in Response, ki predstavljajo HTTP glave, zahteve in odgovore. const res = await fetch(‘https://nodejs.org/api/documentation.json’); if (res.ok) { const data = await res.json(); console.log(data); }
- Stabilizirana je podpora API-ju WebStreams, ki omogoča dostop do podatkovnih tokov, pridobljenih prek omrežja. API omogoča dodajanje lastnih obdelovalnikov, ki delujejo s podatki, ko ti priletijo prek omrežja, ne da bi morali čakati na nalaganje celotne datoteke. V Node.js so na voljo objekti, kot so ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream in DecompressionStream.
- Dodana je eksperimentalna različica odjemalca WebSocket, združljiva z brskalniki. Za vključitev podpore WebSocket je na voljo zastavica '—experimental-websocket'.
- Dodana je eksperimentalna privzeta nastavitev za izvajanje JavaScript modulov ESM (ECMAScript Modules, uporablja se v modulih za brskalnike) namesto CommonJS (specifičen za Node.js). Sprememba ne vpliva na module, čigav format je jasno določen preko polja 'type' v package.json, določenega z zastavico '—input-type' ali očitnega zaradi razširitve datoteke (.mjs za ESM, .cjs za CommonJS). Pri tem se moduli, ki niso izrecno določeni kot CommonJS (npr. imajo končnico '.js'), ob vključitvi nove nastavitve obravnavajo kot ESM module. Za aktiviranje novih nastavitev modulov je predlagana zastavica '—experimental-default-type'.
- Motor V8 je posodobljen na različico 11.8, uporabljeno v Chromium 118, kjer je bila dodana podpora za metodo ArrayBuffer.prototype.transfer, možnost grupiranja tabel (metoda groupBy) in WebAssembly navodila za obdelavo konstant (i32.add, i32.sub, i32.mul, i64.add, i64.sub in i64.mul).
- Podpora za globalPreload obdelovalec je prekinjena, namesto tega je treba za nastavitev modulov uporabiti klice register in initialize.
- Funkciji fs.writeFile je dodana možnost 'flush' za prisilno zapisovanje podatkov na medij po vsakem operaciji zapisa.
- Zmogljivost kode, povezane z analizo URL-jev, API fetch, tokovi, node:fs in HTTP, je bila izboljšana.
- Dodana je globalna objekt navigator. Na primer, za pridobitev podatkov o številu jedrskih CPU lahko uporabite lastnost navigator.hardwareConcurrency.
- Parametru '--test' je dodana podpora za glob-maske za izbiro izvajalnih testov (na primer, lahko navedete '--test **/*.test.js').
- Posodobljena sta bila paketni upravitelj npm 10.2.0 in parser llhttp 9.1.2.
- Podpora za Visual Studio 2019 in verzije macOS, starejše od 11.0, je prekinjena.
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
