Czy są jakieś korzyści związane z wydajnością wynikające z używania jednego nad drugim?
Obecna odpowiedź brzmi „nie”, ponieważ żaden z obecnych silników przeglądarek nie implementuje import/export
standardu ES6.
Niektóre tabele porównawcze http://kangax.github.io/compat-table/es6/ nie biorą tego pod uwagę, więc kiedy widzisz prawie wszystkie zielenie dla Chrome, bądź ostrożny. import
słowo kluczowe z ES6 nie zostało uwzględnione.
Innymi słowy, obecne silniki przeglądarek, w tym V8, nie mogą importować nowego pliku JavaScript z głównego pliku JavaScript za pomocą żadnej dyrektywy JavaScript.
(Być może będziemy jeszcze za kilka błędów lub za kilka lat, dopóki V8 nie wdroży tego zgodnie ze specyfikacją ES6).
Tego dokumentu potrzebujemy, a tego dokumentu musimy przestrzegać.
A standard ES6 mówi, że zależności modułu powinny istnieć, zanim przeczytamy moduł, tak jak w języku programowania C, w którym mieliśmy .h
pliki (nagłówki) .
Jest to dobra i sprawdzona struktura, i jestem pewien, że eksperci, którzy stworzyli standard ES6, mieli to na uwadze.
Dzięki temu Webpack lub inne programy pakujące pakiety mogą zoptymalizować pakiet w niektórych szczególnych przypadkach i zmniejszyć niektóre zależności od pakietu, które nie są potrzebne. Ale w przypadkach, w których mamy doskonałe zależności, nigdy się to nie wydarzy.
Potrzebne będzie trochę czasu, zanim import/export
natywna obsługa zostanie uruchomiona, a require
słowo kluczowe nigdzie nie zniknie.
Co to jest require
?
Jest to node.js
sposób na ładowanie modułów. ( https://github.com/nodejs/node )
Węzeł używa metod na poziomie systemu do odczytu plików. Zasadniczo polegasz na tym podczas korzystania require
. require
zakończy się wywołaniem systemowym, takim jak uv_fs_open
(zależy od systemu końcowego, Linux, Mac, Windows), aby załadować plik / moduł JavaScript.
Aby sprawdzić, czy to prawda, spróbuj użyć Babel.js, a zobaczysz, że import
słowo kluczowe zostanie przekonwertowane na require
.
node --experimental-modules index.mjs
pozwala używaćimport
bez Babel i działa w węźle 8.5.0+. Możesz (i powinieneś) również publikować swoje pakiety npm jako natywny ESModule , ze starą kompatybilnością wstecznąrequire
.