Ci sono vantaggi prestazionali nell'usare l'uno rispetto all'altro?
La risposta attuale è no, perché nessuno dei motori di browser attuali implementa import/export
dallo standard ES6.
Alcuni grafici di confronto http://kangax.github.io/compat-table/es6/ non ne tengono conto, quindi quando vedi quasi tutti i green per Chrome, fai solo attenzione. import
la parola chiave di ES6 non è stata presa in considerazione.
In altre parole, i motori di browser attuali, incluso V8, non possono importare un nuovo file JavaScript dal file JavaScript principale tramite alcuna direttiva JavaScript.
(Potremmo essere ancora a pochi bug di distanza o anni di distanza fino a quando V8 lo implementerà secondo le specifiche ES6.)
Questo documento è ciò di cui abbiamo bisogno e questo documento è ciò a cui dobbiamo obbedire.
E lo standard ES6 ha affermato che le dipendenze del modulo dovrebbero essere lì prima di leggere il modulo come nel linguaggio di programmazione C, dove avevamo .h
file (header) .
Questa è una struttura buona e ben collaudata, e sono sicuro che gli esperti che hanno creato lo standard ES6 lo avevano in mente.
Questo è ciò che consente a Webpack o ad altri bundler di pacchetti di ottimizzare il pacchetto in alcuni casi speciali e ridurre alcune dipendenze dal pacchetto che non sono necessarie. Ma nei casi in cui abbiamo dipendenze perfette questo non accadrà mai.
Ci vorrà del tempo prima che il import/export
supporto nativo diventi attivo e la require
parola chiave non andrà da nessuna parte per molto tempo.
Che cosa è require
?
Questo è il node.js
modo di caricare i moduli. ( https://github.com/nodejs/node )
Il nodo utilizza metodi a livello di sistema per leggere i file. Fondamentalmente fai affidamento su questo durante l'utilizzo require
. require
terminerà con alcune chiamate di sistema come uv_fs_open
(dipende dal sistema finale, Linux, Mac, Windows) per caricare il file / modulo JavaScript.
Per verificare che ciò sia vero, prova a utilizzare Babel.js e vedrai che la import
parola chiave verrà convertita in require
.
node --experimental-modules index.mjs
ti permette di usareimport
senza Babele e funziona in Nodo 8.5.0+. Puoi (e dovresti) anche pubblicare i tuoi pacchetti npm come ESModule nativo , con retrocompatibilità alla vecchiarequire
maniera.