Есть ли преимущества в производительности при использовании одного над другим?
Текущий ответ - нет, потому что ни один из текущих браузерных движков не реализует import/export
стандарт ES6.
Некоторые таблицы сравнения http://kangax.github.io/compat-table/es6/ не учитывают это, поэтому, когда вы видите почти все зеленые цвета для Chrome, просто будьте осторожны. import
Ключевое слово от ES6 не было учтено.
Другими словами, современные браузерные движки, включая V8, не могут импортировать новый файл JavaScript из основного файла JavaScript через любую директиву JavaScript.
(У нас может быть всего несколько ошибок или годы, пока V8 не реализует это в соответствии со спецификацией ES6.)
Этот документ - то, что нам нужно, и этот документ - то, что мы должны соблюдать.
И в стандарте ES6 сказано, что зависимости модуля должны существовать до того, как мы прочитаем модуль, как на языке программирования C, где у нас были (заголовочные) .h
файлы.
Это хорошая и хорошо протестированная структура, и я уверен, что эксперты, создавшие стандарт ES6, имели это в виду.
Это то, что позволяет Webpack или другим пакетным пакетам оптимизировать пакет в некоторых особых случаях и уменьшить некоторые зависимости от пакета, которые не нужны. Но в тех случаях, когда у нас есть идеальные зависимости, этого никогда не произойдет.
Потребуется некоторое время, прежде чем import/export
встроенная поддержка require
начнет действовать, и ключевое слово никуда не денется в течение длительного времени.
Что такое require
?
Это node.js
способ загрузки модулей. ( https://github.com/nodejs/node )
Узел использует системные методы для чтения файлов. Вы в основном полагаетесь на это при использовании require
. require
завершится некоторым системным вызовом, например uv_fs_open
(зависит от конечной системы, Linux, Mac, Windows) для загрузки файла / модуля JavaScript.
Чтобы убедиться, что это правда, попробуйте использовать Babel.js, и вы увидите, что import
ключевое слово будет преобразовано в require
.
node --experimental-modules index.mjs
позволяет использоватьimport
без Babel и работает в Node 8.5.0+. Вы можете (и должны) также публиковать свои пакеты npm как нативный ESModule с обратной совместимостью по старомуrequire
.