È disponibile la piattaforma server JavaScript Node.js 20.0

È stato rilasciato Node.js 20.0, la piattaforma per l'esecuzione di applicazioni web in JavaScript. Node.js 20.0 è stato attribuito ai rami con supporto a lungo termine, ma questo stato verrà conferito solamente a ottobre, dopo un periodo di stabilizzazione. Il supporto per Node.js 20.x sarà garantito fino al 30 aprile 2026. Il supporto per il precedente ramo LTS Node.js 18.x durerà fino ad aprile 2025, mentre quello del ramo LTS 16.x terminerà a settembre 2023. Il supporto per il ramo LTS 14.x cesserà il 30 aprile, mentre per il ramo intermedio Node.js 19.x il 1° giugno.

Miglioramenti principali:

  • Il motore V8 è stato aggiornato alla versione 11.3, utilizzata in Chromium 113. Le modifiche rispetto al ramo Node.js 19, che utilizzava il motore Chromium 107, includono le funzioni String.prototype.isWellFormed e toWellFormed, i metodi Array.prototype e TypedArray.prototype per lavorare con la copia durante la modifica di oggetti Array e TypedArray, il flag 'v' in RegExp, il supporto per il ridimensionamento di ArrayBuffer e l'aumento delle dimensioni di SharedArrayBuffer, e la ricorsione finale (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, escludendo l'intersezione tra il codice delle applicazioni e i moduli ESM caricati. Analogamente a quanto avviene nei browser, il metodo import.meta.resolve() chiamato dall'applicazione ora viene eseguito in modalità sincrona. In una delle prossime versioni di Node.js, si prevede di rendere stabile il supporto per il caricamento di ESM.
  • Il modulo node:test (test_runner), destinato alla creazione e all'esecuzione di test in JavaScript che restituiscono il risultato nel formato TAP (Test Anything Protocol), è stato recentemente reso stabile.
  • È stata costituita una squadra di sviluppatori dedicata all'ottimizzazione delle prestazioni, che ha lavorato per accelerare vari componenti del runtime durante la preparazione di un nuovo ramo, inclusi parsing degli URL, fetch() e EventTarget. Ad esempio, le spese generali per l'inizializzazione di EventTarget sono state ridotte della metà, migliorando significativamente le prestazioni del metodo URL.canParse() e l'efficienza dei timer. Inoltre, è stato incluso il rilascio di un parser URL ad alte prestazioni — Ada 2.0, scritto in C++.
  • Continua lo sviluppo della funzionalità sperimentale per la distribuzione di applicazioni in forma di un singolo file eseguibile (SEA, Single Executable Applications). La creazione del file eseguibile richiede ora l'inserimento di un blob formato sulla base di un file di configurazione in formato JSON (invece dell'inserimento di un file JavaScript).
  • Migliorata la compatibilità dell'API Web Crypto con le implementazioni di altri progetti.
  • Aggiunta la supporto ufficiale per Windows sui sistemi ARM64.
  • È continuata l'implementazione del supporto per le estensioni WASI (WebAssembly System Interface) per la creazione di applicazioni WebAssembly isolate. È stata rimossa la necessità di specificare un particolare flag della riga di comando per attivare il supporto WASI.

La piattaforma Node.js può essere utilizzata sia per il supporto server delle applicazioni web, sia per creare normali programmi di rete client e server. Per espandere le funzionalità delle applicazioni Node.js, è disponibile un'ampia collezione di moduli, in cui è possibile trovare moduli con implementazioni server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per l'integrazione con vari framework web, gestori WebSocket e Ajax, connettori per database (MySQL, PostgreSQL, SQLite, MongoDB), motori di templating, motori CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.

Per gestire un elevato numero di richieste parallele, Node.js utilizza un modello asincrono di esecuzione del codice, basato su un'architettura ad eventi in modalità non bloccante e sulla definizione di callback. Per il multiplexing delle connessioni, vengono supportati metodi come epoll, kqueue, /dev/poll e select. La libreria libuv, che funge da interfaccia sopra libev nei sistemi Unix e IOCP in Windows, viene utilizzata per il multiplexing delle connessioni. La libreria libeio è impiegata per creare un pool di thread, mentre c-ares è integrato per eseguire richieste DNS in modalità non bloccante. Tutti i syscalls bloccanti sono eseguiti all'interno del pool di thread e, come gli handler dei segnali, restituiscono i risultati delle loro operazioni tramite una pipe non nominata. L'esecuzione del codice JavaScript è garantita dall'utilizzo del motore V8 sviluppato da Google (in aggiunta, Microsoft sviluppa una versione di Node.js con il motore Chakra-Core).

In sostanza, 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 in Node.js è nascosto allo sviluppatore e ricorda la gestione degli eventi in un'applicazione web che opera nel browser. Quando si scrivono applicazioni per Node.js, è importante considerare le peculiarità della programmazione orientata agli eventi; per esempio, invece di eseguire "var result = db.query('select..');" aspettando il completamento e poi elaborando i risultati, in Node.js si utilizza il principio dell'esecuzione asincrona, ovvero il codice viene trasformato in "db.query('select..', function (result) {elaborazione del risultato});", permettendo così il passaggio immediato al codice successivo, mentre i risultati della query vengono elaborati man mano che i dati arrivano.

Fonte: opennet.ru

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