Novità di Node.js 21: scopri le funzionalità e gli aggiornamenti più recenti

Pubblicato: 2024-03-26

Grazie al suo enorme ecosistema di pacchetti, al forte supporto della comunità e alla compatibilità multipiattaforma, Node.js viene utilizzato dall'1,4% al 2,22% dei siti Web a livello globale. Questi dati riguardano circa 30 milioni di siti web [i] .

Per più di un decennio, Node.js è stato un attore cruciale nello sviluppo web, fornendo un linguaggio JavaScript unificato sia per lo scripting lato server che per quello client. Il suo modello I/O asincrono e non bloccante garantisce prestazioni ed efficienza elevate, rendendolo ideale per la gestione di connessioni simultanee.

Inoltre, Node.js sfrutta il runtime JavaScript V8, garantendo un'esecuzione rapida. Con la scalabilità al centro, Node.js è particolarmente adatto per applicazioni in tempo reale e architetture di microservizi. Tutte queste funzionalità lo rendono la scelta ideale per gli sviluppatori che desiderano creare applicazioni Web scalabili, efficienti e moderne.

Tuttavia, il 17 ottobre 2023, è stata rilasciata la sua ultima versione Node.js 21 con vari miglioramenti interni e alcune nuove funzionalità rivolte agli utenti. Questo aggiornamento ha dato priorità al miglioramento delle prestazioni attraverso l'esecuzione ottimizzata del runtime e la riduzione del sovraccarico della memoria. Inoltre, incorporava un supporto migliorato per i moduli ECMAScript e un'integrazione perfetta con le tecnologie web più recenti.

In questo post del blog, aggiungeremo ulteriore contesto sui miglioramenti più importanti e sugli aggiornamenti delle funzionalità in Node.js 21.

Immergiamoci!

9 punti salienti dell'ultima versione di Node.js 21

Novità di Node.js 21: scopri le funzionalità e gli aggiornamenti più recenti

1. Aggiornamenti al motore JavaScript V8

Un miglioramento significativo in Node.js 21 è l'aggiornamento del motore V8 alla versione 11.8. Questo aggiornamento non solo migliora le prestazioni, ma introduce anche diverse importanti funzionalità JavaScript.

Un'aggiunta degna di nota è l'introduzione del raggruppamento di array, che consente il consolidamento di dati simili in gruppi attraverso l'uso di metodi comeObject.groupBy()eMap.groupBy(). Inoltre, è stata introdotta una nuova API programmatica,ArrayBuffer.prototype.transfer, per facilitare il trasferimento della proprietà di ArrayBuffers. Questa versione ottimizza inoltre le riallocazioni e risolve la conversione di ArrayBuffer ridimensionabili in ArrayBuffer a lunghezza fissa.

Inoltre, l'aggiornamento estende il supporto per WebAssembly con l'incorporazione di espressioni extend-const, espandendo le capacità di Node.js nello sfruttare gli ultimi progressi nelle tecnologie web e nelle funzionalità JavaScript.

2. Recupero stabile e flussi web

Node.js 21 stabilizza le API fetch e WebStreams, facendole passare dallo stato sperimentale a quello stabile e pronto per l'uso in produzione. Se hai utilizzato queste API nelle versioni precedenti, ora puoi incorporarle con sicurezza nei tuoi flussi di lavoro di produzione.

Le API fetch e WebStreams forniscono un approccio contemporaneo e coerente all'interazione con le risorse e i flussi HTTP all'interno dell'ambiente Node.js, aderendo agli standard web stabiliti. Questa stabilizzazione garantisce che gli sviluppatori implementino queste funzionalità in modo affidabile e standardizzato per gestire il recupero e lo streaming asincroni dei dati nelle loro applicazioni Node.js.

3. Introduzione di un nuovo flag sperimentale per i moduli

Nella versione Node.js 21, un'aggiunta degna di nota è l'introduzione del flag–experimental-default-type, progettato per fornire agli sviluppatori un maggiore controllo sul comportamento predefinito per i file di input non esplicitamente designati come moduli ES o CommonJS.

In assenza di questa funzionalità di flag, tale input veniva convenzionalmente interpretato come CommonJS. Con l'introduzione di–experimental-default-type=module, gli sviluppatori hanno ora la possibilità di attivare un'implementazione completa del modulo ES in scenari specifici. Ciò include i casi in cui l'input di stringa viene fornito tramite –eval o STDIN, soprattutto se–input-typenon viene specificato.

Inoltre, quando si ha a che fare con file che terminano con .js o senza estensione, il flag entra in gioco quando non è presente alcun file package.json associato o il campo genitore più vicino package.json non dispone di un campo "tipo" (eccetto all'interno della directory node_modules ). Questo miglioramento offre agli sviluppatori la flessibilità di sperimentare e adottare i moduli ES in modo più estensivo, fornendo un approccio sfumato e personalizzabile alla gestione dei moduli.

4. Client Websocket integrato

In Node.js 21, un altro notevole miglioramento delle funzionalità è sotto forma di un client WebSocket integrato, che presenta un'implementazione WebSocket sperimentale e compatibile con il browser. Questa funzionalità consente agli sviluppatori di interagire senza problemi con i server WebSocket all'interno delle applicazioni Node.js. Per abilitare questa funzionalità, gli sviluppatori possono utilizzare ilflag –experimental-websocket.

Tuttavia, è importante notare che, essendo una funzionalità sperimentale, l'implementazione è soggetta a potenziali modifiche nelle versioni future poiché viene sottoposta a perfezionamento e stabilizzazione in base al feedback degli utenti e agli standard in evoluzione. L'introduzione di un client WebSocket integrato semplifica l'integrazione della comunicazione WebSocket nelle applicazioni Node.js. Ciò fornisce agli sviluppatori un modo comodo e standardizzato per stabilire e gestire le connessioni WebSocket, riconoscendo al contempo la natura in evoluzione di questa funzionalità durante la fase sperimentale.

5. Il test runner di Node.js ora supporta i glob

L'ultimo aggiornamento Node.js 21 introduce il supporto per i glob nel test runner. Questo miglioramento consente agli sviluppatori di sfruttare le espressioni glob quando specificano il parametro –test, fornendo un modo più potente e flessibile per eseguire i test. Con questa funzionalità, gli sviluppatori possono utilizzare modelli glob versatili per eseguire i test in modo più efficiente. Ad esempio, utilizzando un comando comenode –test **/*.test.js, gli sviluppatori possono eseguire comodamente test per tutti i file con estensione.test.jssu più directory. Questa funzionalità migliora il processo di esecuzione dei test, fornendo maggiore adattabilità e facilità d'uso per gli sviluppatori che lavorano su progetti con strutture di file e configurazioni di test diverse.

6. Aggiungi l'opzione Flush alla funzione Fs.writefile()

In Node.js 21, un notevole miglioramento è l'aggiunta dell'opzione 'flush' alla funzione fs.writeFile. Questo miglioramento risolve lo scenario in cui i dati scritti sui file potrebbero non essere immediatamente trasferiti nell'archivio permanente, portando potenzialmente a successive operazioni di lettura che recuperano dati non aggiornati.

La nuova opzione 'flush', introdotta in questa Pull Request (PR), fornisce agli sviluppatori un maggiore controllo sul comportamento di flushing. Se abilitata, questa opzione garantisce che i dati vengano forzatamente spostati nell'archivio permanente al termine di un'operazione di scrittura riuscita. Questa funzionalità è particolarmente utile in situazioni in cui la coerenza immediata dei dati è fondamentale, prevenendo il verificarsi di dati obsoleti e fornendo agli sviluppatori un meccanismo di scrittura dei file più affidabile e prevedibile nelle applicazioni Node.js.

7. Rimozione dell'hook di personalizzazione del modulo 'globalPreload'

In Node.js 21, gli sviluppatori possono rimuovere l'hook di personalizzazione del modulo "globalPreload". Al suo posto, gli sviluppatori sono incoraggiati a utilizzare il metodo "register" per inviare dati dal thread dell'applicazione agli hook di personalizzazione e l'hook "inizializza" per stabilire un canale di comunicazione tra i thread. Questa modifica fornisce un approccio più strutturato ed esplicito alla personalizzazione dei moduli, avviando una più chiara separazione delle responsabilità.

Il metodo 'register' facilita la trasmissione dei dati agli hook di personalizzazione, mentre l'hook 'initialize' gioca un ruolo nella creazione di canali di comunicazione tra thread. Questo meccanismo perfezionato migliora la modularità e la manutenibilità complessive delle applicazioni Node.js, allineandosi alle migliori pratiche e promuovendo una struttura del codice più intuitiva e organizzata per gli sviluppatori che lavorano con la personalizzazione dei moduli.

8. Lil HTTP 9.1.2 Applicazione della modalità rigorosa

Un altro aggiornamento in Node.js 21 è llhttp 9.1.2 che introduce l'applicazione rigorosa della modalità per impostazione predefinita, garantendo maggiore affidabilità e sicurezza del codice. Le modifiche includono la presenza obbligatoria di\r\ndopo le intestazioni e i blocchi per un'elaborazione coerente dei dati. Inoltre, la trasmissione dei dati dopo un messaggio con l'intestazioneConnection: closenon è più consentita, rafforzando l'aderenza al protocollo e la gestione della connessione. Per soddisfare casi d'uso specifici, viene introdotto il flag–insecure-http-parser, offrendo agli utenti la flessibilità di disabilitare queste modifiche. Questi aggiornamenti mirano a migliorare la stabilità del sistema e la coerenza dell'elaborazione dei dati nelle applicazioni Node.js, spingendo gli sviluppatori a rivedere e adattare la propria base di codice per un'integrazione perfetta.

9. Integrazione dell'oggetto 'navigatore'

Con l'integrazione degli oggetti "navigatore", gli sviluppatori ora hanno accesso diretto alle informazioni sulla concorrenza hardware attraverso il nuovo navigator.hardwareConcurrency. Questo miglioramento allinea Node.js più strettamente agli ambienti browser, fornendo agli sviluppatori un modo standardizzato per recuperare i dettagli sulla concorrenza hardware.

Inoltre, con questa aggiunta, Node.js diventa più versatile, consentendo agli sviluppatori di creare applicazioni che sfruttano le risorse hardware in modo più efficace, sia per ottimizzare le prestazioni che per implementare strategie di elaborazione parallela.

Prendi il controllo del tuo sviluppo Node.js con la versione 21

La versione Node.js 21 offre una serie di entusiasmanti miglioramenti, miglioramenti e nuove funzionalità che promettono di migliorare la tua esperienza di sviluppo. Dall'introduzione di un client WebSocket integrato al supporto per i glob nel test runner, Node.js 21 fornisce agli sviluppatori strumenti potenti per creare applicazioni moderne ed efficienti. Mentre esplori questi progressi, ricordati di testare la compatibilità delle tue applicazioni e di prendere in considerazione l'aggiornamento, in particolare con lo stato di fine vita per Node.js 16, 17 o 19. Tenendo presente la complessità del processo di aggiornamento e migrazione, qui un partner di sviluppo Node.js competente potrebbe essere trasformativo.

Pronto a migliorare lo sviluppo delle tue applicazioni Node.js? Parla con i nostri maestri degli sviluppatori!

I nostri esperti Node.js sono esperti nella creazione di soluzioni web ad alte prestazioni, applicazioni a pagina singola e applicazioni web progressive. Se desideri saperne di più sulla nostra abilità nello sviluppo di Node.js, scrivici a [email protected] e partiremo da lì.

Riferimenti:

[i] Tecnologia Bacancy