Node.js 16.0 har slÀppts, plattformen för att köra nÀtverksapplikationer i JavaScript. Node.js 16.0 tillhör grenar med lÄngsiktigt stöd, men denna status kommer att tilldelas först i oktober, efter stabilisering. Stödet för Node.js 16.0 kommer att pÄgÄ fram till april 2023. UnderhÄllet av den tidigare LTS-grenen Node.js 14.0 kommer att fortsÀtta fram till april 2023, och den föregÄende LTS-grenen 12.0 fram till april 2022. UnderhÄllet för LTS-grenen 10.0 kommer att avslutas om 10 dagar.
Huvudsakliga förbÀttringar:
- V8-motorn har uppdaterats till version 9.0 (i Node.js 15 anvÀndes version 8.6), vilket möjliggjorde funktionsimplementeringar i Node.js 16 som egenskapen "indices" för reguljÀra uttryck (inkluderar en array med initiala och slutliga positioner för grupper av matchningar), metoden Atomics.waitAsync (asynkron version av Atomics.wait), och stöd för att anvÀnda nyckelordet await pÄ översta nivÄn i moduler. Funktionsanrop har ocksÄ pÄskyndats nÀr antalet överförda argument inte stÀmmer överens med de definierade i funktionen.
- API:n Timers Promises har stabiliserats, vilket ger en alternativ uppsĂ€ttning funktioner för att arbeta med timers som returnerar Promise-objekt, vilket eliminerar behovet av att anvĂ€nda util.promisify(). import { setTimeout } from âtimers/promisesâ; async function run() { await setTimeout(5000); console.log(âHello, World!â); } run();
- En experimentell implementation av API:n Web Crypto har lagts till, avsedd för att utföra grundlÀggande kryptografiska operationer pÄ webbapplikationens sida, sÄsom manipulering av kryptografiska hash-vÀrden, generering och verifiering av digitala signaturer, kodning och avkodning av data med hjÀlp av olika krypteringsmetoder samt generering av kryptografiskt sÀkra slumpmÀssiga nummer. API:n innehÄller Àven funktioner för nyckelgenerering och förvaltning.
- N-API (API för utveckling av tillÀgg) har uppdaterats till version 8.
- ĂvergĂ„ngen till den nya versionen av pakethanteraren NPM 7.10 har genomförts.
- Implementeringen av klassen AbortController, baserad pÄ Web API AbortController och som möjliggör avbrytande av signaler i valda API:er baserade pÄ Promise, har stabiliserats.
- Stödet för den tredje versionen av Source Map-formatet, som anvÀnds för att matcha genererad, bearbetad eller packad kod med den ursprungliga kÀllkoden, har stabiliserats.
- För kompatibilitet med förÄldrade Web API har metoderna buffer.atob(data) och buffer.btoa(data) lagts till.
- Arbetet med att skapa versioner för nya Apple-enheter med ARM-chippet M1 har inletts.
- PÄ plattformen Linux har kraven pÄ kompilatorversion höjts till GCC 8.3.
Vi pÄminner om att plattformen Node.js kan anvÀndas bÄde för serverhantering av webbapplikationer och för att skapa vanliga klient- och servernÀtverksprogram. För att utöka funktionaliteten hos applikationer för Node.js finns en stor samling moduler, dÀr man kan hitta moduler med implementationer servrar och kunder för HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, anslutare till databaser (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementationer av kryptalgoritmer och auktorisationssystem (OAuth), XML-parserare.
För att hantera ett stort antal parallella förfrÄgningar anvÀnder Node.js ett asynkront kodkörningssystem baserat pÄ hÀndelsehantering i icke-blockerande lÀge och definierar callback-hanterare. Metoder som epoll, kqueue, /dev/poll och select stöds för multiplexeringsanslutningar. För multiplexeringsanslutningar anvÀnds biblioteket libuv, som Àr ett lager över libev i Unix-system och över IOCP i Windows. För att skapa en trÄdpool anvÀnds biblioteket libeio, och för att utföra DNS-förfrÄgningar i icke-blockerande lÀge integreras c-ares. Alla systemanrop som orsakar blockering utförs inom trÄdpoolen och skickar sedan, liksom signalhanterare, tillbaka resultatet av sitt arbete genom en anonym kanal (pipe). Utförandet av JavaScript-kod sÀkerstÀlls genom att anvÀnda den av Google utvecklade V8-motorn (dessutom utvecklar Microsoft en variant av Node.js med Chakra-Core-motorn).
I grunden liknar Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted och hÀndelsehantering i Tcl, men hÀndelsecykeln (event loop) i Node.js Àr gömd för utvecklaren och pÄminner om hÀndelsehantering i en webbapplikation som körs i webblÀsaren. Vid utveckling av applikationer för Node.js Àr det viktigt att ta hÀnsyn till den hÀndelseorienterade programmeringsspecifikationen. IstÀllet för att köra "var result = db.query('select..');" och vÀnta pÄ att operationen ska slutföras innan jag behandlar resultaten, anvÀnds i Node.js principen för asynkron bearbetning. Det vill sÀga koden omformas till "db.query('select..', function (result) {resultathantering});", dÀr kontrollen omedelbart gÄr vidare till nÀsta kod medan resultaten kommer att bearbetas efter hand.
Det kan ocksÄ nÀmnas att Deno, företaget grundat av skaparen av Node.js för att utveckla nÀsta generations plattform Deno, har fÄtt 4,9 miljoner dollar i investeringar. Deno pÄminner i sitt syfte om Node.js, men strÀvar efter att ÄtgÀrda de konceptuella fel som begicks i arkitekturen för Node.js och ge anvÀndarna en mer sÀker miljö. Det noteras att affÀrslösningar frÄn Deno kommer att baseras pÄ helt öppna produkter, och modellen Open Core med utveckling av separat betald funktionalitet uppfattas som oacceptabel för Deno-plattformen.
KĂ€lla: opennet.ru
