Platforma server-side JavaScript Node.js 20.0 është e disponueshme

Doli Node.js 20.0, një platformë për ekzekutimin e aplikacioneve rrjet në gjuhën JavaScript. Node.js 20.0 është klasifikuar në degët me mbështetje të gjatë, por ky status do t'i jepet vetëm në tetor, pas stabilizimit. Mbështetja për Node.js 20.x do të vazhdojë deri më 30 prill 2026. Mbështetja për degën e kaluar LTS të Node.js 18.x do të zgjasë deri në prill 2025, ndërsa për degën e mëparshme LTS 16.x deri në shtator 2023. Mbështetja për degën LTS 14.x do të përfundojë më 30 prill, ndërsa për degën ndërmjetëse Node.js 19.x më 1 qershor.

Përmirësimet kryesore:

  • Motori V8 është përditësuar në versionin 11.3, i përdorur në Chromium 113. Nga ndryshimet në krahasim me degën Node.js 19, në të cilën u përdor motori Chromium 107, theksohen funksionet String.prototype.isWellFormed dhe toWellFormed, metodat Array.prototype dhe TypedArray.prototype për të punuar me kopjen gjatë ndryshimit të objekteve Array dhe TypedArray, flamuri 'v' në RegExp, mbështetje për ndryshimin e madhësisë së ArrayBuffer dhe rritjen e madhësisë së SharedArrayBuffer, si dhe rekurenca tail-call në 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

    Për verifikimin e aksesit, rekomandohet të përdoret metoda process.permission.has(), për shembull, 'process.permission.has(‘fs.write’, '/tmp/test').

  • Menaxherët e moduleve të jashtme ECMAScript (ESM), të ngarkuar nëpërmjet opsionit ‘—experimental-loader’, tani ekzekutohen në një thread të veçantë, të izoluar nga thread-i kryesor, duke eliminuar përzierjen e kodit të aplikacioneve dhe moduleve ESM të ngarkuara. Siç ndodh në shfletues, metoda import.meta.resolve() kur thirret nga aplikacioni tani ekzekutohet në modalitetin sinkron. Në një nga degët e ardhshme të Node.js, planifikohet që mbështetja e ngarkimit të ESM të kalojë në mundësi të stabilizuara.
  • Moduli node:test (test_runner), i cili është i destinuar për të krijuar dhe ekzekutuar teste në gjuhën JavaScript që kthejnë rezultate në formatin TAP (Test Anything Protocol), është transferuar në kategorinë e stabilizuar.
  • Është formuar një ekip i veçantë zhvilluesish, përgjegjës për optimizimin e performancës, i cili gjatë përgatitjes së degës së re ka bërë punë për të përshpejtuar komponentët e ndryshëm të runtime, duke përfshirë analizën e URL, fetch() dhe EventTarget. Për shembull, kostot gjatë inicializimit të EventTarget janë reduktuar me gjysmë, performanca e metodës URL.canParse() është përmirësuar ndjeshëm dhe efikasiteti i punës së timerëve është rritur. Për më tepër, është përfshirë një lëshim me performancë të lartë për analizuesin e URL-ve — Ada 2.0, e shkruar në gjuhën C++.
  • Është vazhduar zhvillimi i mundësisë eksperimentale për furnizimin e aplikacioneve në formën e një skedari ekzekutiv të vetëm (SEA, Aplikacione Ekzekutive të Vetme). Krijimi i skedarit ekzekutiv tani kërkon një zëvendësim blob-i, i krijuar mbi bazën e një skede konfigurimi në formatin JSON (në vend të zëvendësimit të skedarëve JavaScript).
  • Është përmirësuar kompatibiliteti i API-së Web Crypto me implementimet nga projekte të tjera.
  • Është shtuar mbështetje zyrtare për Windows në sistemet ARM64.
  • Është vazhduar realizimi i mbështetjes për zgjerimet WASI (WebAssembly System Interface) për krijimin e aplikacioneve të veçanta WebAssembly. Është hequr nevoja për të treguar një flamur të veçantë në linjën e komandës për aktivizimin e mbështetjes për WASI.

Platforma Node.js mund të përdoret për mbështetje serverike të funksionimit të aplikacioneve Web, si dhe për krijimin e aplikacioneve të zakonshme klient-server. Për të zgjeruar funksionalitetin e aplikacioneve për Node.js, është përgatitur një koleksion i madh modulash, ku mund të gjenden module me implementime serverësh dhe klientë HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module për integrimin me framework-e të ndryshme web, trajtues të WebSocket dhe Ajax, lidhës për DB (MySQL, PostgreSQL, SQLite, MongoDB), motorë të templativëve, engine CSS, implementime të algoritmeve kriptografikë dhe sisteme autorizimi (OAuth), parserë XML.

Për të siguruar përpunimin e një numri të madh kërkesash paralel, Node.js përdor një model asinkron të ekzekutimit të kodit, i bazuar në trajtimin e ngjarjeve në modusin jo-bllokues dhe përcaktimin e handler-ave të callback. Metodat e mbështetura për multipleximin e lidhjeve përfshijnë epoll, kqueue, /dev/poll dhe select. Biblioteka libuv përdoret për multipleximin e lidhjeve, e cila është një shtresë mbi libev në sistemet Unix dhe mbi IOCP në Windows. Për krijimin e një puli të thread-eve, përdoret biblioteka libeio, ndërsa për ekzekutimin e kërkesave DNS në mod të jo-bllokues, është integruar c-ares. Të gjitha thirrjet sistemore qe shkaktojnë bllokim, ekzekutohen brenda pulit të thread-eve dhe më pas, ashtu si dhe handler-at e sinjalit, përcjellin rezultatin e punës së tyre pas një kanali të paemëruar (pipe). Ekzekutimi i kodit JavaScript sigurohet përmes përdorimit të motorit V8 të zhvilluar nga kompania Google (përveç kësaj, Microsoft po zhvillon një variant të Node.js me motorin Chakra-Core).

Në thelb, Node.js është e ngjashme me framework-et Perl AnyEvent, Ruby Event Machine, Python Twisted dhe implementimin e ngjarjeve në Tcl, por cikli i trajtimit të ngjarjeve (event loop) në Node.js është i fshehur nga zhvilluesi dhe përngjan me trajtimin e ngjarjeve në një aplikacion web që funksionon në shfletues. Kur shkruani aplikacione për node.js, është e domosdoshme të merret parasysh specifika e programimit të orientuar nga ngjarjet, për shembull, në vend që të ekzekutohet "var result = db.query('select..');" duke pritur për përfundimin dhe përpunimin e rezultateve, në Node.js përdoret parimi i ekzekutimit asinkron, dmth. kodi transformohet në "db.query('select..', function (result) {përpunimi i rezultatit});", ku kontrolli do të kalojë menjëherë në kodin e mëtejshëm, dhe rezultati i kërkesës do të përpunohen ndërsa vijnë të dhënat.

Burimi: opennet.ru

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster