¿Hay algún beneficio de rendimiento al usar uno sobre el otro?
La respuesta actual es no, porque ninguno de los motores de navegador actuales se implementa import/export
desde el estándar ES6.
Algunos cuadros de comparación http://kangax.github.io/compat-table/es6/ no tienen esto en cuenta, así que cuando vea casi todos los verdes para Chrome, tenga cuidado. import
La palabra clave de ES6 no se ha tenido en cuenta.
En otras palabras, los motores de navegador actuales, incluido V8, no pueden importar archivos JavaScript nuevos desde el archivo JavaScript principal a través de ninguna directiva JavaScript.
(Es posible que aún nos falten algunos errores o que falten años para que V8 lo implemente de acuerdo con la especificación ES6).
Este documento es lo que necesitamos, y este documento es lo que debemos obedecer.
Y el estándar ES6 decía que las dependencias del módulo deberían estar allí antes de leer el módulo como en el lenguaje de programación C, donde teníamos (encabezados) .h
archivos .
Esta es una estructura buena y bien probada, y estoy seguro de que los expertos que crearon el estándar ES6 lo tenían en cuenta.
Esto es lo que permite a Webpack u otros paquetes de paquetes optimizar el paquete en algunos casos especiales y reducir algunas dependencias del paquete que no son necesarias. Pero en casos tenemos dependencias perfectas, esto nunca sucederá.
Necesitará algo de tiempo hasta que se import/export
active el soporte nativo, y la require
palabra clave no irá a ningún lado durante mucho tiempo.
¿Qué es require
?
Esta es la node.js
forma de cargar módulos. ( https://github.com/nodejs/node )
El nodo utiliza métodos de nivel de sistema para leer archivos. Básicamente confías en eso cuando lo usas require
. require
finalizará en alguna llamada al sistema como uv_fs_open
(depende del sistema final, Linux, Mac, Windows) para cargar el archivo / módulo de JavaScript.
Para comprobar que esto es cierto, intente usar Babel.js y verá que la import
palabra clave se convertirá en require
.
node --experimental-modules index.mjs
te permite usarimport
sin Babel y funciona en el Nodo 8.5.0+. También puede (y debe) publicar sus paquetes npm como ESModule nativo , con compatibilidad con versiones anterioresrequire
.