Dostupna je JavaScript platforma Node.js 20.0 na strani servera

Objavljen je Node.js 20.0, platforma za pokretanje mrežnih aplikacija u JavaScript-u. Node.js 20.0 je klasifikovan kao grana za dugoročnu podršku, ali ovaj status će biti dodijeljen tek u oktobru, nakon stabilizacije. Node.js 20.x će biti podržan do 30. aprila 2026. Održavanje prethodne LTS grane Node.js 18.x trajaće do aprila 2025. godine, a pretposlednje LTS grane 16.x do septembra 2023. godine. 14.x LTS grana će biti ukinuta 30. aprila, a Node.js 19.x scenska grana će biti ukinuta 1. juna.

Glavna poboljšanja:

  • V8 motor je ažuriran na verziju 11.3, korištenu u Chromiumu 113. Promjene u poređenju sa granom Node.js 19, koja je koristila Chromium 107 motor, uključuju funkcije String.prototype.isWellFormed i toWellFormed, Array.prototype i TypedArray. metode prototipa za rad sa kopijom pri promjeni objekata Array i TypedArray, oznaka “v” u RegExp-u, podrška za promjenu veličine ArrayBuffer-a i povećanje veličine SharedArrayBuffer-a, rekurzija repa (tail-call) u WebAssembly-u.
  • Predložen je eksperimentalni mehanizam modela dozvole koji omogućava ograničavanje pristupa određenim resursima tokom izvršavanja. Podrška modela dozvola je omogućena navođenjem zastavice “--experimental-permission” prilikom pokretanja. Početna implementacija nudi opcije za ograničavanje pristupa pisanja (--allow-fs-write) i čitanja (--allow-fs-read) određenim dijelovima sistema datoteka, podređenim procesima (--allow-child-process) i dodaci (--no-addons) ) i niti (--allow-worker). Na primjer, da biste omogućili pisanje u /tmp direktorij i čitanje /home/index.js datoteke, možete odrediti: čvor —eksperimentalna-dozvola —allow-fs-write=/tmp/ —allow-fs-read=/home /index.js indeks .js

    Za provjeru pristupa, predlaže se korištenje metode process.permission.has(), na primjer, “process.permission.has('fs.write',"/tmp/test").

  • Rukovaoci ECMAScript eksternog modula (ESM) učitani preko opcije "--experimental-loader" sada rade u zasebnoj niti, izolovanoj od glavne niti, eliminišući ukrštanje koda aplikacije i učitanih ESM modula. Slično pretraživačima, metoda import.meta.resolve() se sada izvršava sinhrono kada se pozove iz aplikacije. U jednoj od narednih grana Node.js-a, planirano je da se podrška za učitavanje ESM-a prenese u kategoriju stabilnih karakteristika.
  • Modul node:test (test_runner), dizajniran za kreiranje i pokretanje testova u JavaScript-u koji vraćaju rezultate u TAP (Test Anything Protocol) formatu, je učinjen stabilnim.
  • Formiran je poseban razvojni tim zadužen za optimizaciju performansi, koji je, prilikom pripreme nove grane, radio na ubrzavanju različitih komponenti vremena rada, uključujući raščlanjivanje URL-a, fetch() i EventTarget. Na primjer, troškovi inicijalizacije EventTarget-a su prepolovljeni, performanse metode URL.canParse() su značajno poboljšane, a efikasnost tajmera je poboljšana. Takođe uključuje izdavanje URL parsera visokih performansi, Ada 2.0, napisanog na C++.
  • Nastavljen je razvoj eksperimentalne sposobnosti za isporuku aplikacija u obliku jedne izvršne datoteke (SEA, Single Executable Applications). Kreiranje izvršne datoteke sada zahtijeva zamjenu blob-a generiranog iz konfiguracijske datoteke u JSON formatu (umjesto zamjene JavaScript datoteke).
  • Poboljšana kompatibilnost Web Crypto API-ja sa implementacijama iz drugih projekata.
  • Dodata zvanična podrška za Windows na ARM64 sistemima.
  • Nastavljena je implementacija podrške za WASI (WebAssembly System Interface) ekstenzije za kreiranje samostalnih WebAssembly aplikacija. Uklonjena je potreba za navođenjem posebne oznake komandne linije da bi se omogućila WASI podrška.

Node.js platforma se može koristiti i za serversko održavanje web aplikacija i za kreiranje redovnih klijentskih i serverskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js, pripremljena je velika zbirka modula u kojoj se mogu pronaći moduli sa implementacijom HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 servera i klijenata, moduli za integraciju sa raznim web okvirima, WebSocket i Ajax rukovaocima, DBMS konektorima (MySQL, PostgreSQL, SQLite, MongoDB), šablonskim mašinama, CSS motorima, implementacijama kripto algoritama i sistema autorizacije (OAuth), XML parserima.

Da bi se osigurala obrada velikog broja paralelnih zahtjeva, Node.js koristi model izvršavanja asinhronog koda zasnovan na rukovanju događajima bez blokiranja i definiciji rukovatelja povratnim pozivima. Podržane metode za multipleksiranje veza su epoll, kqueue, /dev/poll i select. Za multipleksiranje veze koristi se biblioteka libuv, koja je dodatak za libev na Unix sistemima i IOCP na Windows. Biblioteka libeio se koristi za kreiranje spremišta niti, a c-ares je integriran za obavljanje DNS upita u neblokirajućem načinu. Svi sistemski pozivi koji uzrokuju blokiranje izvode se unutar spremišta niti, a zatim, kao rukovaoci signala, prenose rezultat svog rada nazad kroz neimenovanu cijev (cijev). Izvršenje JavaScript koda je obezbeđeno korišćenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js sa Chakra-Core motorom).

U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted framework-u i Tcl implementaciji događaja, ali je petlja događaja u Node.js skrivena od programera i nalikuje rukovanju događajima u web aplikaciji koja radi u pretraživaču. Kada pišete aplikacije za node.js, morate uzeti u obzir specifičnosti programiranja vođenog događajima, na primjer, umjesto da radite "var result = db.query("select..");" uz čekanje završetka rada i naknadnu obradu rezultata, Node.js koristi princip asinhronog izvršavanja, tj. kod se transformira u "db.query("select..", function (result) {result processing});", u kojem će kontrola trenutno proći daljem kodu, a rezultat upita će biti obrađen kako podaci stignu.

izvor: opennet.ru

Dodajte komentar