Node.js 16.0 is released, a platform for executing network applications in JavaScript. Node.js 16.0 is classified under long-term support branches, but this status will only be assigned in October after stabilization. Support for Node.js 16.0 will be provided until April 2023. Support for the previous LTS branch Node.js 14.0 will last until April 2023, while the earlier LTS branch 12.0 will be supported until April 2022. Support for the LTS branch 10.0 will end in 10 days.
Hoofdverbeteringen:
- The V8 engine has been updated to version 9.0 (version 8.6 was used in Node.js 15), enabling features in Node.js 16 such as the 'indices' property for regular expressions (which includes an array with the start and end positions of matching groups), the Atomics.waitAsync method (an asynchronous version of Atomics.wait), and support for the await keyword at the top level in modules. Function calls have become faster in situations where the number of passed arguments does not match the parameters defined in the function.
- The Timers Promises API has been stabilized, providing an alternative set of functions for working with timers that return Promise objects, allowing for the use of util.promisify() to be bypassed. import { setTimeout } from 'timers/promises'; async function run() { await setTimeout(5000); console.log('Hello, World!'); } run();
- An experimental implementation of the Web Crypto API has been added, designed for basic cryptographic operations on the web application side, such as manipulation of cryptographic hashes, generation and verification of digital signatures, encoding and decoding data using various encryption methods, and generating cryptographically secure random numbers. The API also includes functions for key generation and management.
- N-API (API for add-on development) has been updated to version 8.
- The transition to the new version of the package manager NPM 7.10 has been carried out.
- The implementation of the AbortController class, based on the Web API AbortController, has been stabilized, allowing the cancellation of signals in selected Promise-based APIs.
- Support for the third version of the Source Map format, used for mapping generated, processed, or bundled modules back to the original source code, has been stabilized.
- For compatibility with deprecated Web APIs, methods buffer.atob(data) and buffer.btoa(data) have been added.
- De opbouw van nieuwe Apple-apparaten met de ARM M1-chip is begonnen.
- Op het Linux-platform zijn de vereisten voor de compilerversie verhoogd naar GCC 8.3.
Ter herinnering, het Node.js-platform kan zowel worden gebruikt voor server-side ondersteuning van webapplicaties, als voor de ontwikkeling van reguliere client- en server-netwerkprogramma's. Voor de uitbreiding van de functionaliteit van Node.js-applicaties is er een uitgebreide verzameling modules beschikbaar, waarin modules met implementaties te vinden zijn. 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.
Daarnaast is het vermeldenswaardig dat het bedrijf Deno, opgericht door de maker van Node.js om het nieuwe generatieplatform Deno te ontwikkelen, 4,9 miljoen dollar aan investeringen heeft ontvangen. Deno lijkt op Node.js, maar probeert de conceptuele fouten in de architectuur van Node.js te corrigeren en gebruikers een veiliger omgeving te bieden. Het wordt opgemerkt dat de bedrijfsoplossingen van Deno zullen worden gebouwd op volledig open producten, en het Open Core-model met afzonderlijke betaalde functionaliteit wordt als onaanvaardbaar voor het Deno-platform beschouwd.
Bron: opennet.ru
