Server-side JavaScript-platform Node.js 20.0 beschikbaar

De release van Node.js 20.0, een platform voor het uitvoeren van netwerkapplicaties in JavaScript, heeft plaatsgevonden. Node.js 20.0 is toegewezen aan de lange ondersteuningstak, maar deze status wordt pas in oktober toegewezen, na stabilisatie. Node.js 20.x wordt ondersteund tot 30 april 2026. Het onderhoud van de vorige Node.js 18.x LTS-tak duurt tot april 2025 en de vorige 16.x LTS-tak tot september 2023. De 14.x LTS-tak wordt op 30 april vastgehouden en de Node.js 19.x interim-tak op 1 juni.

Belangrijkste verbeteringen:

  • De V8-engine is geüpdatet naar versie 11.3, die wordt gebruikt in Chromium 113. Van de wijzigingen ten opzichte van de Node.js 19-tak, die de Chromium 107-engine gebruikte, zijn de functies String.prototype.isWellFormed en toWellFormed de Array.prototype en TypedArray.prototype-methoden om te werken met kopiëren bij wijziging van Array- en TypedArray-objecten, "v"-vlag in RegExp, ondersteuning voor het wijzigen van de grootte van ArrayBuffer en het vergroten van de grootte van SharedArrayBuffer, staartaanroep in WebAssembly.
  • Er wordt een experimenteel mechanisme voor het machtigingsmodel voorgesteld waarmee u de toegang tot bepaalde bronnen tijdens de uitvoering kunt beperken. Ondersteuning van het machtigingsmodel wordt ingeschakeld door de vlag "--experimentele machtiging" op te geven tijdens het uitvoeren. Bij de initiële implementatie werden opties voorgesteld om schrijf- (-allow-fs-write) en leestoegang (--allow-fs-read) te beperken tot bepaalde delen van de FS, onderliggende processen (--allow-child-proces) , add-ons (--no-addons ) en threads (--allow-worker). Om bijvoorbeeld het schrijven naar de map /tmp en het lezen van het bestand /home/index.js toe te staan, kunt u het volgende specificeren: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Om de toegang te controleren, wordt aangeraden om de methode process.permission.has() te gebruiken, bijvoorbeeld "proces.permission.has('fs.write',"/tmp/test").

  • Handlers voor externe ECMAScript-modules (ESM's) die via de "--experimental-loader"-optie worden geladen, worden nu uitgevoerd in een aparte thread, geïsoleerd van de hoofdthread, waardoor de kruising van applicatiecode en geladen ESM-modules wordt geëlimineerd. Net als bij browsers, wordt de methode import.meta.resolve() nu synchroon uitgevoerd wanneer deze wordt aangeroepen vanuit een toepassing. In een van de volgende branches van Node.js is gepland dat ESM-laadondersteuning wordt verplaatst naar de categorie stabiele functies.
  • De module node:test (test_runner), ontworpen om JavaScript-tests te maken en uit te voeren die resultaten retourneren in TAP-indeling (Test Anything Protocol), is verplaatst naar stabiel.
  • Er is een apart prestatieteam gevormd dat ter voorbereiding op de nieuwe branch heeft gewerkt aan het versnellen van verschillende runtime-componenten, waaronder URL-parsing, fetch() en EventTarget. Zo is de overhead van het initialiseren van EventTarget gehalveerd, zijn de prestaties van de methode URL.canParse() aanzienlijk verbeterd en is de efficiëntie van de timers verbeterd. Daarnaast is de release van een krachtige URL-parser - Ada 2.0, geschreven in C ++ - in de samenstelling opgenomen.
  • De ontwikkeling van een experimentele functie voor het leveren van applicaties in de vorm van een enkel uitvoerbaar bestand (SEA, Single Executable Applications) is voortgezet. Voor het maken van een uitvoerbaar bestand moet nu een blob worden vervangen die is gegenereerd op basis van een JSON-configuratiebestand (in plaats van een JavaScript-bestand te vervangen).
  • Verbeterde Web Crypto API-compatibiliteit met implementaties van andere projecten.
  • Officiële ondersteuning toegevoegd voor Windows op ARM64-systemen.
  • Doorlopende ondersteuning voor WASI-extensies (WebAssembly System Interface) voor het maken van zelfstandige WebAssembly-applicaties. De noodzaak verwijderd om een ​​speciale opdrachtregelvlag op te geven om WASI-ondersteuning in te schakelen.

Het Node.js-platform kan zowel worden gebruikt voor serveronderhoud van webapplicaties als voor het maken van reguliere client- en servernetwerkprogramma's. Om de functionaliteit van applicaties voor Node.js uit te breiden, is een grote verzameling modules voorbereid, waarin u modules kunt vinden met de implementatie van HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servers en -clients, modules voor integratie met verschillende webframeworks, WebSocket- en Ajax-handlers, DBMS-connectoren (MySQL, PostgreSQL, SQLite, MongoDB), templating-engines, CSS-engines, implementaties van crypto-algoritmen en autorisatiesystemen (OAuth), XML-parsers.

Om de verwerking van een groot aantal parallelle verzoeken te garanderen, gebruikt Node.js een asynchrone code-uitvoeringsmodel op basis van niet-blokkerende gebeurtenisafhandeling en de definitie van callback-handlers. Ondersteunde methoden voor multiplexverbindingen zijn epoll, kqueue, /dev/poll en select. Voor verbindingsmultiplexing wordt de libuv-bibliotheek gebruikt, een add-on voor libev op Unix-systemen en IOCP op Windows. De libeio-bibliotheek wordt gebruikt om een ​​threadpool te maken en c-ares is geïntegreerd om DNS-query's in niet-blokkerende modus uit te voeren. Alle systeemaanroepen die blokkering veroorzaken, worden uitgevoerd binnen de threadpool en dragen vervolgens, net als signaalbehandelaars, het resultaat van hun werk terug via een naamloze pijp (pijp). De uitvoering van JavaScript-code wordt verzorgd door het gebruik van de V8-engine die is ontwikkeld door Google (daarnaast ontwikkelt Microsoft een versie van Node.js met de Chakra-Core-engine).

In de kern is Node.js vergelijkbaar met de Perl AnyEvent, Ruby Event Machine, Python Twisted-frameworks en de Tcl-gebeurtenisimplementatie, maar de gebeurtenislus in Node.js is verborgen voor de ontwikkelaar en lijkt op het afhandelen van gebeurtenissen in een webtoepassing die wordt uitgevoerd in browser. Bij het schrijven van applicaties voor node.js moet u bijvoorbeeld rekening houden met de specifieke kenmerken van gebeurtenisgestuurd programmeren in plaats van "var result = db.query("select..");" met wachten op voltooiing van het werk en daaropvolgende verwerking van resultaten, gebruikt Node.js het principe van asynchrone uitvoering, d.w.z. de code wordt getransformeerd in "db.query("select..", function (result) {result processing});", waarin de besturing onmiddellijk wordt doorgegeven aan verdere code, en het queryresultaat wordt verwerkt zodra er gegevens binnenkomen.

Bron: opennet.ru

Voeg een reactie