Piattaforma JavaScript lato server Node.js 21.0 disponibile

È stato rilasciato Node.js 21.0, una piattaforma per eseguire applicazioni di rete in JavaScript. Il ramo Node.js 21.0 sarà supportato per 6 mesi. Nei prossimi giorni verrà completata la stabilizzazione del branch Node.js 20, che riceverà lo status LTS e sarà supportato fino ad aprile 2026. La manutenzione del precedente ramo LTS di Node.js 18.0 durerà fino a settembre 2025 e l'anno precedente all'ultimo ramo LTS 16.0 fino ad aprile 2024.

Principali miglioramenti:

  • È stata dichiarata stabile l'API Fetch, progettata per caricare risorse in rete e semplificare la scrittura di codice JavaScript universale adatto a lavorare lato server e client. L'implementazione si basa sul codice del client HTTP/1.1 undici ed è il più vicino possibile all'API simile fornita nei browser. L'API include il metodo fetch() e gli oggetti Headers. Richiesta e risposta, che rappresentano le intestazioni HTTP, richiesta e risposta. const res = attendono fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = attendono res.json(); console.log(dati); }
  • È stato stabilizzato il supporto per l'API WebStreams, che fornisce l'accesso ai flussi di dati ricevuti sulla rete. L'API consente di aggiungere i propri gestori che lavorano con i dati man mano che le informazioni arrivano sulla rete, senza attendere il download dell'intero file. Gli oggetti disponibili in Node.js includono ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream e DecompressionStream.
  • Aggiunta implementazione sperimentale del client WebSocket, compatibile con i browser. Per abilitare il supporto WebSocket, viene fornito il flag "--experimental-websocket".
  • Aggiunta una modalità sperimentale per utilizzare l'implementazione predefinita dei moduli JavaScript ESM (moduli ECMAScript, utilizzati nei moduli per browser) invece di CommonJS (specifico per Node.js). La modifica non riguarda i moduli il cui formato è definito esplicitamente tramite il campo "tipo" in package.json, specificato tramite il flag "--input-type", o è ovvio a causa dell'estensione del file (.mjs per ESM, .cjs per CommonJS). Tuttavia, i moduli che non sono esplicitamente definiti come CommonJS (ad esempio, hanno un'estensione ".js") verranno trattati come moduli ESM quando la nuova modalità è abilitata. Per attivare le nuove impostazioni del modulo è stato proposto il flag “--experimental-default-type”.
  • Il motore V8 è stato aggiornato alla versione 11.8, utilizzata in Chromium 118, che ora supporta il metodo ArrayBuffer.prototype.transfer, la possibilità di raggruppare array (metodo groupBy) e istruzioni WebAssembly per l'elaborazione di costanti (i32.add, i32.sub, i32.mul, i64 .add, i64.sub e i64.mul).
  • Il supporto per il gestore globalPreload è stato interrotto, a favore delle chiamate di registrazione e inizializzazione per configurare i moduli.
  • È stata aggiunta un'opzione "flush" alla funzione fs.writeFile per forzare lo scaricamento dei dati nell'unità dopo ogni operazione di scrittura.
  • Prestazioni migliorate del codice relativo all'analisi degli URL, all'API di recupero, ai flussi, a node:fs e HTTP.
  • Aggiunto oggetto navigatore globale. Ad esempio, per ottenere dati sul numero di core della CPU, è possibile utilizzare la proprietà navigator.hardwareConcurrency.
  • Nel parametro “—test” è stato aggiunto il supporto alle maschere glob per la selezione dei test da eseguire (ad esempio è possibile specificare “—test **/*.test.js.”).
  • Il gestore pacchetti in bundle npm 10.2.0 e il parser llhttp 9.1.2 sono stati aggiornati.
  • Il supporto per Visual Studio 2019 e le versioni di macOS precedenti alla 11.0 è stato interrotto.

La piattaforma Node.js può essere utilizzata sia per la manutenzione del server di applicazioni Web sia per la creazione di normali programmi di rete client e server. Per espandere la funzionalità delle applicazioni per Node.js, è stata preparata un'ampia raccolta di moduli, in cui è possibile trovare moduli con l'implementazione di server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per l'integrazione con vari framework web, gestori WebSocket e Ajax, connettori DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di template, 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 non bloccanti e sulla definizione di gestori di callback. I metodi supportati per le connessioni multiplex sono epoll, kqueue, /dev/poll e select. Per il multiplexing della connessione viene utilizzata la libreria libuv, che è un componente aggiuntivo per libev su sistemi Unix e IOCP su Windows. La libreria libeio viene utilizzata per creare un pool di thread e c-ares è integrato per eseguire query DNS in modalità non bloccante. Tutte le chiamate di sistema che causano il blocco vengono eseguite all'interno del pool di thread e quindi, come i gestori di segnali, trasferiscono il risultato del loro lavoro attraverso una pipe (pipe) senza nome. L'esecuzione del codice JavaScript avviene tramite l'utilizzo del motore V8 sviluppato da Google (inoltre Microsoft sta sviluppando una versione di Node.js con il motore Chakra-Core).

Fondamentalmente, Node.js è simile a Perl AnyEvent, Ruby Event Machine, Python Twisted framework e all'implementazione di eventi Tcl, ma il loop degli eventi in Node.js è nascosto allo sviluppatore e assomiglia alla gestione degli eventi in un'applicazione web in esecuzione nel browser. Quando si scrivono applicazioni per node.js, è necessario considerare le specifiche della programmazione basata sugli eventi, ad esempio, invece di fare "var result = db.query("select..");" con l'attesa del completamento del lavoro e la successiva elaborazione dei risultati, Node.js utilizza il principio dell'esecuzione asincrona, ovvero il codice viene trasformato in "db.query("seleziona..", funzione (risultato) {elaborazione risultato});", in cui il controllo passerà immediatamente a ulteriore codice e il risultato della query verrà elaborato all'arrivo dei dati.

Fonte: opennet.ru

Aggiungi un commento