Disponibile la piattaforma server JavaScript Node.js 20.0

È stata rilasciata la versione 20.0 di Node.js, una piattaforma per l'esecuzione di applicazioni di rete in JavaScript. Node.js 20.0 è classificata come una versione a lungo termine, ma questo stato verrà conferito solo a ottobre, dopo il processo di stabilizzazione. Il supporto per Node.js 20.x sarà disponibile fino al 30 aprile 2026. Il supporto per la precedente versione LTS Node.js 18.x durerà fino ad aprile 2025, mentre per la versione LTS 16.x fino a settembre 2023. Il supporto per la versione LTS 14.x sarà interrotto il 30 aprile, e per la versione intermedia Node.js 19.x il 1 giugno.

Principali miglioramenti:

  • Il motore V8 è stato aggiornato alla versione 11.3, utilizzata in Chromium 113. Tra le novità rispetto alla versione dell'engine di Node.js 19, che utilizzava Chromium 107, si segnalano le funzioni String.prototype.isWellFormed e toWellFormed, i metodi Array.prototype e TypedArray.prototype per lavorare con una copia durante la modifica degli oggetti Array e TypedArray, il flag 'v' in RegExp, il supporto per la modifica delle dimensioni di ArrayBuffer e l'aumento delle dimensioni di SharedArrayBuffer, e la ricorsione di coda (tail-call) 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

    Per verificare l'accesso si consiglia di utilizzare il metodo process.permission.has(), ad esempio, 'process.permission.has('fs.write','/tmp/test').

  • I gestori dei moduli esterni ECMAScript (ESM), caricati tramite l'opzione '--experimental-loader', ora vengono eseguiti in un thread separato, isolato dal thread principale, evitando l'intersezione tra il codice dell'applicazione e i moduli ESM caricati. Analogamente ai browser, il metodo import.meta.resolve() invocato dall'applicazione ora viene eseguito in modalità sincrona. In una delle prossime versioni di Node.js si prevede di trasformare il supporto per il caricamento di ESM in funzionalità stabili.
  • Il modulo node:test (test_runner), destinato alla creazione e all'esecuzione di test in JavaScript, è stato trasferito nella categoria delle funzionalità stabili, restituendo risultati nel formato TAP (Test Anything Protocol).
  • È stato formato un team di sviluppatori dedicato all'ottimizzazione delle prestazioni, che per la preparazione della nuova versione ha lavorato per accelerare diversi componenti runtime, inclusi analisi di URL, fetch() e EventTarget. Ad esempio, le spese generali durante l'inizializzazione di EventTarget sono state ridotte della metà, sono state notevolmente migliorate le prestazioni del metodo URL.canParse() e l'efficienza dei timer è stata aumentata. Inoltre, è stata inclusa la versione ad alte prestazioni del parser URL — Ada 2.0, scritto in C++.
  • È continuato lo sviluppo della funzionalità sperimentale per la distribuzione di applicazioni in un unico file eseguibile (SEA, Single Executable Applications). La creazione del file eseguibile richiede ora la sostituzione di un blob, generato a partire da un file di configurazione in formato JSON (invece della sostituzione di un file JavaScript).
  • Migliorata la compatibilità dell'API Web Crypto con le implementazioni di altri progetti.
  • Aggiunta la compatibilità ufficiale con Windows sui sistemi ARM64.
  • È proseguita l'implementazione del supporto per le estensioni WASI (WebAssembly System Interface) per la creazione di applicazioni WebAssembly isolate. Rimosso il bisogno di specificare un flag speciale nella riga di comando per abilitare il supporto WASI.

La piattaforma Node.js può essere utilizzata sia per il supporto server lato Web di applicazioni che per creare normali programmi client e server di rete. Per espandere la funzionalità delle applicazioni Node.js è stata preparata una vasta collezione di moduli, in cui si possono trovare moduli con implementazione server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per integrazioni con diversi framework web, gestori WebSocket e Ajax, connettori a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di templating, motori CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.

Per garantire l'elaborazione di un gran numero di richieste parallele, Node.js utilizza un modello di esecuzione del codice asincrono, basato sulla gestione degli eventi in modalità non bloccante e sulla definizione di gestori di callback. Come metodi di multiplexing delle connessioni, sono supportati metodi come epoll, kqueue, \/dev\/poll e select. Per il multiplexing delle connessioni viene utilizzata la libreria libuv, che è un'astrazione sopra libev nei sistemi Unix e sopra IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria libeio, mentre per eseguire richieste DNS in modalità non bloccante è integrato c-ares. Tutti le chiamate di sistema che causano bloccaggi vengono eseguite all'interno del pool di thread e quindi, come i gestori di segnali, trasmettono il risultato del loro lavoro indietro attraverso un canale non nominato (pipe). L'esecuzione del codice JavaScript è garantita dall'utilizzo del motore V8 sviluppato da Google (in aggiunta Microsoft sviluppa una variante di Node.js con il motore Chakra-Core).

Fondamentalmente, Node.js è simile ai framework Perl AnyEvent, Ruby Event Machine, Python Twisted e all'implementazione degli eventi in Tcl, ma il ciclo di gestione degli eventi (event loop) in Node.js è nascosto agli sviluppatori e ricorda la gestione degli eventi in un'applicazione web che opera nel browser. Quando si scrivono applicazioni per Node.js, è necessario considerare le specificità della programmazione orientata agli eventi; ad esempio, invece di eseguire "var result = db.query('select...');" attendendo il completamento e la successiva elaborazione dei risultati, Node.js utilizza il principio dell'esecuzione asincrona, ossia il codice si trasforma in "db.query('select...', function (result) {elaborazione del risultato});", dove il controllo passa immediatamente al codice successivo e il risultato della query viene elaborato man mano che i dati diventano disponibili.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster