Server-side JavaScript-platform Node.js 21.0 beschikbaar

Node.js 21.0 is uitgebracht, een platform voor het uitvoeren van netwerkapplicaties in JavaScript. De Node.js 21.0 branch wordt gedurende 6 maanden ondersteund. De komende dagen wordt de stabilisatie van de Node.js 20-branch voltooid, die de LTS-status krijgt en wordt ondersteund tot april 2026. Het onderhoud van de vorige LTS-tak van Node.js 18.0 duurt tot september 2025, en het jaar daarvoor de laatste LTS-tak 16.0 tot april 2024.

Belangrijkste verbeteringen:

  • De Fetch API is stabiel verklaard, ontworpen voor het laden van bronnen via het netwerk en het vereenvoudigen van het schrijven van universele JavaScript-code die geschikt is om aan de server- en clientzijde te werken. De implementatie is gebaseerd op de code van de HTTP/1.1 undici-client en komt zo dicht mogelijk bij de vergelijkbare API die in browsers wordt aangeboden. De API bevat de methode fetch() en Headers-objecten. Request en Response, die de HTTP-headers, request en response vertegenwoordigen. const res = wachten op ophalen('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = wacht op res.json(); console.log(gegevens); }
  • Ondersteuning voor de WebStreams API, die toegang biedt tot gegevensstromen die via het netwerk worden ontvangen, is gestabiliseerd. De API maakt het mogelijk om uw eigen handlers toe te voegen die met gegevens werken zodra informatie via het netwerk binnenkomt, zonder te hoeven wachten tot het volledige bestand is gedownload. Objecten die beschikbaar zijn in Node.js zijn onder meer ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream en DecompressionStream.
  • Experimentele implementatie van WebSocket-client toegevoegd, compatibel met browsers. Om WebSocket-ondersteuning in te schakelen, is de vlag “--experimental-websocket” aanwezig.
  • Een experimentele modus toegevoegd voor het gebruik van de standaardimplementatie van JavaScript-modules ESM (ECMAScript Modules, gebruikt in modules voor browsers) in plaats van CommonJS (specifiek voor Node.js). De wijziging heeft geen invloed op modules waarvan het formaat expliciet is gedefinieerd via het veld "type" in package.json, gespecificeerd via de vlag "--input-type", of duidelijk is vanwege de bestandsextensie (.mjs voor ESM, .cjs voor CommonJS). Modules die niet expliciet zijn gedefinieerd als CommonJS (bijvoorbeeld met de extensie “.js”) worden behandeld als ESM-modules wanneer de nieuwe modus wordt ingeschakeld. Om nieuwe module-instellingen te activeren, is de vlag “--experimenteel-default-type” voorgesteld.
  • De V8-engine is bijgewerkt naar versie 11.8, gebruikt in Chromium 118, die nu de ArrayBuffer.prototype.transfer-methode ondersteunt, de mogelijkheid om arrays te groeperen (groupBy-methode) en WebAssembly-instructies voor het verwerken van constanten (i32.add, i32.sub, i32.mul, i64.add, i64.sub en i64.mul).
  • Ondersteuning voor de globalPreload-handler is stopgezet, ten gunste van het registreren en initialiseren van oproepen om modules te configureren.
  • Er is een “flush”-optie toegevoegd aan de fs.writeFile-functie om te forceren dat gegevens na elke schrijfbewerking naar de schijf worden gespoeld.
  • Verbeterde prestaties van code met betrekking tot URL-parsering, ophaal-API, streams, node:fs en HTTP.
  • Globaal navigatorobject toegevoegd. Als u bijvoorbeeld gegevens over het aantal CPU-kernen wilt verkrijgen, kunt u de eigenschap navigator.hardwareConcurrency gebruiken.
  • In de parameter “—test” is ondersteuning voor glob-maskers toegevoegd voor het selecteren van tests die moeten worden uitgevoerd (u kunt bijvoorbeeld “—test **/*.test.js.” opgeven).
  • De gebundelde pakketbeheerder npm 10.2.0 en de llhttp 9.1.2-parser zijn bijgewerkt.
  • Ondersteuning voor Visual Studio 2019 en versies van macOS ouder dan 11.0 is stopgezet.

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