L'ultima versione principale di Node.js porta molti miglioramenti significativi alla community JavaScript, incluso un motore JavaScript aggiornato, NPM versione 5, API V8, Node.js di Google, Async_Hooks, un parser URL WhatWG, tampieri più sicuri e altro ancora. Qui ti aggiorneremo su queste funzionalità e gli altri aspetti più importanti di questa versione.
Node.js 8 è rilasciato sotto il nome del codice in carbonio ed è ora disponibile dal Node.js sito. . Sarà attivamente lavorato per altri 18 mesi (nessuna nuova funzionalità, solo correzioni di bug, miglioramenti della sicurezza e aggiornamenti NPM), prima di entrare in modalità di manutenzione. Come con le versioni precedenti, durante i rilasci della modalità di manutenzione riceveranno solo aggiornamenti di sicurezza critici e correzioni di bug.
È sicuro dire che poiché Node.js è in circolazione, questo è uno dei maggiori aggiornamenti che il runtime abbia mai ricevuto - cambia come vengono scritti i componenti aggiuntivi nativi e porta anche ulteriori miglioramenti di sicurezza e prestazioni.
Risdingstack. Ha aiutato le aziende a raggiungere il nodo.JS per quattro anni con formazione, consulenza o sviluppo. Una delle più grandi lotte che avevamo aggiunto stava aggiungendo dipendenze native ai progetti.
Prima del nodo.js 8, se le applicazioni dipendessero da moduli con il codice nativo, quando sono arrivate le principali versioni nuove node.js, come manutentore dell'applicazione che hai dovuto ricompilare le dipendenze. Se fossi fortunato, hanno lavorato all'inizio.
Questo processo è stato reso possibile con i tremendi manutentori di moduli di lavoro mettendo a far funzionare i loro moduli attraverso versioni di nodo incompatibili, principalmente con l'aiuto di un modulo chiamato Nan (Node.js nativo astractions).
Questo processo è lontano dall'ideale, come molte aziende non sono riuscite a ottenere le loro dipendenze aggiornate se non potevano essere compilate, e ha anche un enorme carico di lavoro extra sui manutentori del modulo. Per risolvere questo problema, è stato introdotto l'API NODE.JS (o N-API).
L'API Node.js è uno dei miglioramenti più significativi del nodo.js 8. Porta un ABI ben definito (interfaccia binaria applicazione) al nodo.js per rendere la sua macchina virtuale agnostica. Ciò significa che i moduli nativi non funzionano solo con diverse versioni Node.js utilizzando il motore JavaScript di Google V8, ma anche con il chakra di Microsoft.
Per ora, l'N-API è in uno stato sperimentale, il che significa che i cambiamenti significativi possono accadere sia all'implementazione che all'API. Con questo detto, i manutentori dei moduli nativi sono incoraggiati a provare la nuova interfaccia e dare un feedback.
Se sei un manutentore del modulo, è possibile rilasciare una versione N-API del modulo in parallelo con la versione del modulo principale. Per fare ciò, la raccomandazione ufficiale è pubblicare una versione del tuo modulo con il tag N-API a NPM.
Per pubblicare una versione N-API, devi:
In questo modo si assicura che la versione N-API non diventi l'ultima versione, quindi se qualcuno installa il modulo, per impostazione predefinita ottengono la versione non N-API.
Filato, il gestore dei pacchetti creato dagli ingegneri di Facebook, è stato rilasciato nell'ottobre 2016. Ha cercato di affrontare alcune carenze del client NPM ufficiale, per lo più diventando più performanti e deterministici. La maggior parte di queste innovazioni è presente anche in NPM 5.
Proprio come il filato, NPM 5 ha introdotto un meccanismo di blocco-file - ogni volta che stai installando una nuova dipendenza al progetto, verrà aggiunto automaticamente non solo per pacchetto.json. , ma un nuovo file chiamato pacchetto-lock.json. anche.
Puoi chiedere qual è la differenza tra pacchetto-lock.json. e npm-whrywrap.json. , come NPM-Shrinkwrap è stato in NPM da allora? A lungo story, sono essenzialmente gli stessi, ma pacchetto-lock.json. viene creato automaticamente.
Il loro scopo è quello di descrivere esattamente quale albero di dipendenza NPM deve creare per il tuo pacco. Se hai entrambi, NPM-Trustwrap. prenderà la precedenza. Basato sulla raccomandazione di NPM, dovresti usare npm-whrywrap.json. Se vuoi pubblicarlo, quindi anche i consumatori dei moduli lo useranno. D'altra parte, dovresti usare il pacchetto-lock.json internamente - anche controllato in repository.
Ma i miglioramenti per NPM 5 non si sono fermati con l'aggiunta di un file di blocco - con la nuova versione, tutti i moduli che stai installando vengono salvati automaticamente e verranno aggiunti sia per il tuo pacchetto.json. e pacchetto-lock.json. file.
Anche il modo in cui il lavoro degli script NPM ha cambiato un po '. Prima di tutto, gli script preinstallati ora corrono prima di tutto il resto, in modo che possano modificare la directory node_modules prima che la CLI effettivamente le lesse. Oltre a questo, sono stati aggiunti due nuovi script - prepack e postpack. Entrambi sono eseguiti su NPM Pack e NPM Pubblicazione pure, ma non su NPM Installa.
Nel cuore di Node.js è il motore JavaScript che interpreta il tuo codice JavaScript, crea bytecode da esso e consente di eseguire la tua applicazione. Con la nuova versione Node.js 8, questo è stato aggiornato pure.
Con il motore V8 aggiornato, vengono introdotti importanti miglioramenti delle prestazioni - ma soprattutto, è garantito di avere un'interfaccia binaria applicazione compatibile in avanti. Ciò significa che Node.js sarà in grado di aggiornare il motore V8 senza un importante nodo.JS versione.
Ciò è fondamentale, poiché le versioni più recenti del motore V8 introdurranno una nuova pipeline del compilatore, che introdurrà ulteriori miglioramenti delle prestazioni a Node.js. Questo aggiornamento è stato così importante che fosse la ragione per cui la data di rilascio originale Node.js 8 è stata posticipata.
La pipeline attuale è troppo complessa e introducendo nuove funzionalità linguistiche di solito significa toccare più parti della tubazione. Con la nuova pipeline, diventerà molto più semplice.
Accensione, il nuovo interprete, e Turbofan, il nuovo compilatore di ottimizzazione, è stato in fase di sviluppo per quasi tre anni e mezzo. Sono i fondamenti su cui saranno costruite nuove funzionalità linguistiche. Includono l'esperienza che il team V8 su Google ha raccolto dalla misurazione delle applicazioni JavaScript di misurazione della vita reale.
Per capire meglio cosa sono i ganci async, facciamo un passo indietro e arriviamo a prendere in considerazione prima la continuazione locale. Lavorano come archiviazione del filo-locale in programmazione filettata, ma in node.js utilizza callback per passare il contesto.
Immagina di scrivere un'applicazione che recupera un prodotto dal database, quindi in seguito vuoi inviarlo nella tua risposta HTML:
Const CreatenamSpace = Richiedere ("continuazione-locale-stoccaggio"). CreatenamSpace
Const Session = CreatenAmSpace ('My-App-Session')
Const DB = Richiedere ('./ db.js')
Funzione onRequest (Opzioni, Avanti) {
db.fetchUserByID (opzioni.id, funzione (errore, utente) {
Se (errore) {
Ritorna il prossimo (errore)
}
sessione.set ('utente', utente)
Il prossimo()
})
Successivamente, se si desidera accedere all'oggetto utente, tutto ciò che devi fare è afferrarlo dalla memoria locale:
Cost GetNameSpace = Richiedere ("Continuation-Local-Storage"). GetNechespace
CONST SESSION = GETNAMESPACE ('MY Session')
Cost Render = Richiedere ('./ render.js')
Funzione Finitura (risposta) {
const user = session.get ('utente')
Render ({utente: utente}). Tubo (risposta)
}
Questa tecnica è ampiamente utilizzata dai fornitori di provider di monitoraggio delle prestazioni applicative, come la traccia di Russtack, per mantenere il contesto dell'esecuzione e raccogliere informazioni di monitoraggio dei sistemi di produzione.
Con i ganci Async, una funzione simile viene spostata sul nucleo nodo.js - aiuta a tracciare richieste e gestori asincroni attraverso il loro ciclo di vita. Il async_hooks. Il modulo fornisce un API per registrare le callback che monitorano la durata delle risorse asincrono create all'interno di un'applicazione Node.js.
Prima del nodo.JS 8, se si desidera utilizzare i moduli di base in un'applicazione che utilizza promesse, è necessario avvolgere manualmente i moduli principali in modo che possano essere utilizzati allo stesso modo. Sembrava qualcosa del genere:
CONST FS = Richiedi ('FS')
Funzione readfilepromise (... args) {
restituire la nuova promessa ((risoluzione, rifiutare) = & gt; {
fs.readfile (... args, (err, risultato) = & gt; {
Se (ERR) {
Restituire la risoluzione (ERR)
}
Risultati (risultato)
})
})
}
readfilepromise ('./ Package.json', 'UTF-8')
.then ((res) = & gt; console.log (res))
.CATCH ((ERR) = & GT; CONSOLE.LOG (ERR))
Con Node.js 8, un nuovo metodo Helper viene aggiunto al modulo nucleo Util, util.promistify. Permette che gli API dello stile di callback standard.JS siano avvolti in una funzione che restituisce le promesse.
Usando questa funzione, lo snippet sopra è semplificato e diventa questo:
CONST FS = Richiedi ('FS')
Cost Promisify = Richiesta ('util'). Promise
readfilepromise = Promisify (fs.readfile)
readfilepromise ('./ Package.json', 'UTF-8')
.then ((res) = & gt; console.log (res))
.CATCH ((ERR) = & GT; CONSOLE.LOG (ERR))
Prima della versione 8 Node.js, i buffer assegnati utilizzando il nuovo costruttore del buffer (numero) non hanno inizializzato lo spazio di memoria con zero. Di conseguenza, i nuovi istanze del buffer potrebbero contenere informazioni sensibili, portando a gravi problemi di sicurezza, anche moduli popolari come mangusta, ws o il modulo di richiesta sono stati interessati.
Ma come ci siamo arrivati? Quando JavaScript è stato spostato dal browser al lato server, è stata necessaria una necessità di un'elaborazione dei dati rapida e semplice - quindi è stata aggiunta la classe del buffer. Il buffer è una matrice mutevole di dati binari. Se utilizzato con il costruttore che richiede la dimensione del nuovo buffer, ha appena prenotato lo spazio di memoria, ma non lo ha pulito.
Poiché il tuo server può servire più utenti contemporaneamente (a differenza del browser), è possibile che lo spazio di memoria appena assegnato contiene informazioni sensibili da altri utenti (persino password!) E possono essere potenzialmente esposte a un utente malintenzionato.
Sebbene sia stata una decisione intenzionale di aumentare la performance della nuova creazione di buffer, per la maggior parte di noi, non era l'uso previsto - anche se è stato documentato. Per questo motivo, a partire da Node.js 8, i buffer assegnati utilizzando il nuovo buffer (numero) o il buffer (numero) verranno automaticamente riempiti con zeri.
Prima del node.js 8, se si desidera eseguire il debug delle tue applicazioni Node.js, una delle soluzioni più facili da avviare il debugger incorporato, utilizzando il debug del nodo indice.js. Con Node.js 8, questo viene rimosso e sostituito da Node-Inspector. Puoi ancora usare il debugger CLI, ma verrà rimosso a breve.
D'ora in poi, dovresti usare il nodo --inspect index.js. , o nodo. --inspect-brk index.js Se si desidera il debugger di mettere un punto di interruzione sulla prima riga dell'applicazione. Una volta eseguiti, riceverai un collegamento WebSocket che Google Chrome può utilizzare per collegare il suo debugger.
Dovresti andare avanti a Chrome: // Ispeziona Nel tuo browser Chrome, e riconoscerà automaticamente l'applicazione Node.js in esecuzione, consentendo di connettersi. Dopo aver collegato al tuo processo, riceverai il debugger di Chrome per ispezionare la tua applicazione in esecuzione Node.js.
In precedenza, se volevi controllare un errore ricevuto in runtime e agire di conseguenza, nella maggior parte dei casi è stato necessario controllare il messaggio di errore. Questo è stato incline ad errore, poiché i messaggi di errore potrebbero essere cambiati con le versioni NODE.JS.
Con Node.js 8, i codici di errore statici sono stati assegnati alla maggior parte degli errori - è ancora un work-in-progress, ma una volta terminato, questi codici di errore non cambieranno, anche se il messaggio nell'errore .
Ad esempio, il nuovo introdotto API URL WhatWG lancerà un Err_invalid_url. Errore nel seguente snippet, poiché il parametro non è un URL valido:
CONST URL = Richiedere ('URL'). URL
Const Myurl = New URL ('/ foo')
Come puoi vedere, il rilascio dell'Aggiornamento Node.js 8 ha portato un sacco di nuovi ed entusiasmanti miglioramenti alla comunità JavaScript. Per iniziare a sperimentare tutte queste nuove funzionalità da soli, vai a nodejs.org. , Scarica il nodo.js 8 binary e inizia a giocare con il tuo nuovo set di strumenti!
Questo articolo è originariamente apparso in Magazine netta Edizione 296. Compralo qui .
Articoli Correlati:
Rendering di un'immagine, l'animazione di un modello o anche un'intera scena è un passo importante nella creazione artistica. Se..
Se usato bene, Animazione CSS. può aggiungere interessi e personalità al tuo sito. In questo articolo, attraverseremo come creare un effetto animato ..
Pagina 1 di 2: Pagina 1 Pagina 1 Pagina 2 Se vuoi andare oltre che ..
Ogni prima installazione di clip studio di vernice comporta un'esplorazione eccitata del sottotool decorazione. È una vera efficiente smorfasbord di spazzole naturali, innaturali e decise ch..
Durante la manovra il tuo Modelli 3D. L'utilizzo di Bones può essere molto efficace, a volte quel metodo non è adatto - e le espressioni facciali sono una di qu..
I seguenti consigli abbassano il mio processo per animare Bink per la produzione web imminente di Eric Miller Animation Studios. Bink è una curiosa creatura seafaring che è stata catturata ..
Decisioni, decisioni, decisioni ... Se esiste un aspetto chiave al processo di lavoro con il tipo è che il designer o il tipografo dovranno fare un'intera serie di decisioni prima di raggiun..
Designer e creativi da tutti i campi sono come mazze nel loro appetito per raccogliere cose luminose e brillanti. Probabilmente a..