De server-side JavaScript-platform Node.js 20.0 is beschikbaar

De release van Node.js 20.0, het platform voor het uitvoeren van netwerken toepassingen geschreven in JavaScript, heeft plaatsgevonden. Node.js 20.0 is geclassificeerd als een versie met lange termijn ondersteuning, maar deze status wordt pas in oktober toegekend, na de stabilisatie. De ondersteuning van Node.js 20.x zal doorgaan tot 30 april 2026. De ondersteuning van de vorige LTS-versie Node.js 18.x duurt tot april 2025, terwijl de ondersteuning van de voorlaatste LTS-versie 16.x tot september 2023 zal duren. De ondersteuning van de LTS-versie 14.x eindigt op 30 april, en de tussenversie Node.js 19.x op 1 juni.

Hoofdverbeteringen:

  • De V8-engine is geüpdatet naar versie 11.3, die wordt gebruikt in Chromium 113. Ten opzichte van de Node.js 19 tak, waarin de Chromium 107 engine werd gebruikt, zijn er veranderingen zoals de functies String.prototype.isWellFormed en toWellFormed, de methoden Array.prototype en TypedArray.prototype voor het werken met kopieën bij het wijzigen van Array- en TypedArray-objecten, de flag 'v' in RegExp, ondersteuning voor het vergroten van ArrayBuffer en SharedArrayBuffer, en tail-call recursie in 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

    Voor toegangscontrole wordt aangeraden om de methode process.permission.has() te gebruiken, bijvoorbeeld "process.permission.has('fs.write', '/tmp/test')".

  • Handlers van externe ECMAScript-modules (ESM), geladen via de optie '--experimental-loader', worden nu uitgevoerd in een aparte thread, geïsoleerd van de hoofdthread, waardoor code van applicaties en geladen ESM-modules elkaar niet meer overlappen. Net als in browsers wordt de methode import.meta.resolve() nu synchroon uitgevoerd wanneer deze vanuit de applicatie wordt aangeroepen. In een van de volgende Node.js-versies is het de bedoeling om de ondersteuning voor het laden van ESM naar stabiele functionaliteiten te verplaatsen.
  • De module node:test (test_runner), bedoeld voor het maken en uitvoeren van tests in JavaScript die resultaten retourneren in het TAP-formaat (Test Anything Protocol), is nu stabiel.
  • Er is een apart team van ontwikkelaars gevormd dat verantwoordelijk is voor prestatie-optimalisatie. Dit team heeft, bij de voorbereiding van een nieuwe versie, gewerkt aan het versnellen van verschillende runtime-componenten, waaronder URL-parsering, fetch() en EventTarget. Bijvoorbeeld, de overhead bij het initialiseren van EventTarget is met een factor twee verminderd, de prestaties van de methode URL.canParse() zijn aanzienlijk verbeterd en de efficiëntie van timers is verhoogd. Bovendien is er een high-performance URL-parser toegevoegd — Ada 2.0, geschreven in C++.
  • De ontwikkeling van de experimentele mogelijkheid voor het leveren van applicaties in de vorm van een enkel uitvoerbaar bestand (SEA, Single Executable Applications) is voortgezet. Het creëren van een uitvoerbaar bestand vereist nu het invoegen van een blob, die wordt gegenereerd op basis van een configuratiebestand in JSON-indeling (in plaats van het invoegen van een JavaScript-bestand).
  • De compatibiliteit van de API Web Crypto met implementaties van andere projecten is verbeterd.
  • Officiële ondersteuning voor Windows op ARM64-systemen is toegevoegd.
  • De implementatie van ondersteuning voor WASI-extensies (WebAssembly System Interface) voor het maken van geïsoleerde WebAssembly-applicaties is voortgezet. De noodzaak om een speciale opdrachtregelparameter op te geven om de ondersteuning voor WASI in te schakelen, is verwijderd.

Het Node.js-platform kan worden gebruikt voor zowel serverondersteuning van webapplicaties als voor het creëren van reguliere client- en servernetwerkprogramma's. Voor de uitbreiding van de functionaliteit van toepassingen voor Node.js is er een grote collectie modules beschikbaar, waar je modules kunt vinden met implementatie van servers en clients voor HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, modules voor integratie met verschillende webframeworks, WebSocket en Ajax handlers, connectoren naar databases (MySQL, PostgreSQL, SQLite, MongoDB), template-engines, CSS-engines, implementaties van cryptografie en autorisatiesystemen (OAuth), XML-parsers.

Om een groot aantal parallelle verzoeken te verwerken, maakt Node.js gebruik van een asynchroon model voor het uitvoeren van code, gebaseerd op het verwerken van gebeurtenissen in een niet-blokkerende modus en het definiëren van callback-handlers. Methoden zoals epoll, kqueue, /dev/poll en select worden ondersteund voor het multiplexen van verbindingen. De libuv bibliotheek, die een bovenlaag vormt boven libev in Unix-systemen en boven IOCP in Windows, wordt gebruikt voor het multiplexen van verbindingen. Voor het creëren van een thread pool wordt de libeio bibliotheek ingezet en voor het uitvoeren van DNS-verzoeken in niet-blokkerende modus is c-ares geïntegreerd. Alle systeemaanroepen die blokkeren, worden uitgevoerd binnen de thread pool en geven vervolgens, net als signaalhandlers, het resultaat van hun werk terug via een onge benoemde pijp. De uitvoering van JavaScript-code wordt mogelijk gemaakt door het gebruik van de door Google ontwikkelde V8-engine (bovendien ontwikkelt Microsoft een variant van Node.js met de Chakra-Core engine).

Node.js is in essence similar to frameworks like Perl AnyEvent, Ruby Event Machine, Python Twisted, and the event implementation in Tcl, but the event loop in Node.js is hidden from the developer and resembles event handling in a web application running in a browser. When writing applications for Node.js, it's important to consider the specifics of event-driven programming. For instance, instead of executing 'var result = db.query("select.." );' and waiting for it to finish before processing the results, Node.js employs an asynchronous execution principle where the code transforms to 'db.query("select..", function (result) {result processing});', allowing control to pass immediately to the subsequent code, while the result of the query is processed as data comes in.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster