Dostupna JavaScript platforma na strani poslužitelja Node.js 20.0

Došlo je do izdanja Node.js 20.0, platforme za izvršavanje mrežnih aplikacija u JavaScriptu. Node.js 20.0 dodijeljen je grani duge podrške, ali ovaj status neće biti dodijeljen do listopada, nakon stabilizacije. Node.js 20.x bit će podržan do 30. travnja 2026. Održavanje prethodne grane Node.js 18.x LTS trajat će do travnja 2025., a prethodne grane 16.x LTS do rujna 2023. Ogranak 14.x LTS bit će obustavljen 30. travnja, a privremeni ogranak Node.js 19.x 1. lipnja.

Glavna poboljšanja:

  • Motor V8 ažuriran je na verziju 11.3, koja se koristi u Chromiumu 113. Od promjena u usporedbi s granom Node.js 19, koja je koristila motor Chromium 107, funkcije String.prototype.isWellFormed i toWellFormed, Array.prototype i TypedArray.prototype metode za rad s kopijom pri promjeni objekata Array i TypedArray, zastavica "v" u RegExp, podrška za promjenu veličine ArrayBuffera i povećanje veličine SharedArrayBuffera, tail-call u WebAssemblyju.
  • Predlaže se eksperimentalni mehanizam Permission Model koji vam omogućuje da ograničite pristup određenim resursima tijekom izvođenja. Podrška za model dopuštenja omogućena je određivanjem oznake "--experimental-permission" prilikom pokretanja. U početnoj implementaciji predložene su opcije za ograničavanje pisanja (--allow-fs-write) i čitanja (--allow-fs-read) pristupa određenim dijelovima FS-a, podređenim procesima (--allow-child-process) , dodaci (--no-addons) i niti (--allow-worker). Na primjer, da biste dopustili pisanje u direktorij /tmp i čitanje datoteke /home/index.js, možete navesti: čvor --experimental-permission --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").

  • Rukovatelji za ECMAScript vanjske module (ESM-ove) učitane putem opcije "--experimental-loader" sada se izvode u zasebnoj niti, izoliranoj od glavne niti, što eliminira križanje koda aplikacije i učitanih ESM modula. Slično preglednicima, metoda import.meta.resolve() sada se izvršava sinkrono kada se pozove iz aplikacije. U jednom od idućih ogranaka Node.js-a, podrška za učitavanje ESM-a planira se premjestiti u kategoriju stabilnih značajki.
  • Modul node:test (test_runner), dizajniran za stvaranje i pokretanje JavaScript testova koji vraćaju rezultate u TAP (Test Anything Protocol) formatu, premješten je u stabilan.
  • Formiran je zaseban tim za izvedbu koji je, u pripremi za novu granu, radio na ubrzanju različitih komponenti vremena izvođenja, uključujući raščlanjivanje URL-a, fetch() i EventTarget. Na primjer, troškovi inicijalizacije EventTarget su prepolovljeni, izvedba metode URL.canParse() značajno je poboljšana, a učinkovitost mjerača vremena je poboljšana. Osim toga, izdanje visokoučinkovitog URL parsera - Ada 2.0, napisanog u C ++, uključeno je u sastav.
  • Nastavljen je razvoj eksperimentalne značajke za isporuku aplikacija u obliku jedne izvršne datoteke (SEA, Single Executable Applications). Stvaranje izvršne datoteke sada zahtijeva zamjenu bloba generiranog iz JSON konfiguracijske datoteke (umjesto zamjene JavaScript datoteke).
  • Poboljšana kompatibilnost Web Crypto API-ja s implementacijama iz drugih projekata.
  • Dodana službena podrška za Windows na ARM64 sustavima.
  • Kontinuirana podrška za proširenja WASI (WebAssembly System Interface) za stvaranje samostalnih WebAssembly aplikacija. Uklonjena je potreba za navođenjem posebne oznake naredbenog retka za omogućavanje WASI podrške.

Platforma Node.js može se koristiti i za poslužiteljsko održavanje web aplikacija i za kreiranje regularnih klijentskih i poslužiteljskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js pripremljena je velika zbirka modula u kojoj možete pronaći module s implementacijom HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 poslužitelja i klijenata, module za integraciju s raznim web okvirima, WebSocket i Ajax rukovateljima, DBMS konektorima (MySQL, PostgreSQL, SQLite, MongoDB), mehanizmima za izradu predložaka, CSS motorima, implementacijama kripto algoritama i autorizacijskim sustavima (OAuth), XML parserima.

Kako bi se osigurala obrada velikog broja paralelnih zahtjeva, Node.js koristi model izvršavanja asinkronog koda koji se temelji na rukovanju događajima bez blokiranja i definiciji rukovatelja povratnim pozivom. 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 sustavima i IOCP na Windowsima. Biblioteka libeio koristi se za stvaranje skupa niti, a c-ares je integriran za izvođenje DNS upita u načinu rada bez blokiranja. Svi sistemski pozivi koji uzrokuju blokiranje izvršavaju se unutar skupa niti i zatim, poput rukovatelja signalima, prenose rezultat svog rada natrag kroz neimenovanu cijev (pipe). Izvršenje JavaScript koda omogućeno je korištenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js s Chakra-Core motorom).

U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted okvirima i Tcl implementaciji događaja, ali petlja događaja u Node.js skrivena je od programera i nalikuje rukovanju događajima u pokrenutoj web aplikaciji u pregledniku. Kada pišete aplikacije za node.js, trebate 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 asinkronog izvođenja, tj. kod se transformira u "db.query("select..", function (result) {result processing});", u kojem će kontrola trenutno prijeći na daljnji kod, a rezultat upita će se obrađivati ​​kako podaci stignu.

Izvor: opennet.ru

Dodajte komentar