使用ES6 Module如何處理模塊按需載入 (lazyload)?


ES6 module(import/export 語句)是靜態的,所以無法用於按需載入。

但有一份新的規範提案 dynamic import(tc39/proposal-dynamic-import)可用於動態載入。該提案已經達到 stage 3,有望在明年進入標準。

babel已經支持解析該語法:Syntax Dynamic Import,不過要在生產環境用還需要配置其他插件。

以下為瀏覽器的實現情況:

Safari: Implement dynamic-import for WebCore

Chrome: 711706 - Implement dynamic import - chromium - Monorail

Firefox: 1342012 - Implement the dynamic import() proposal

WebKit早在1月份就已經實現了!我在WebKit Nightly Build里測試通過。之所以可以這麼快,是因為WebKit已經實現了&

最後提一點,import() 並不限定必須在&


去除冗餘代碼有人提到了treeshaking,可以去掉沒有被調用的代碼。如果是對Es6 模塊優化 建議你看下https://zhuanlan.zhihu.com/p/25012345 本地緩存+線上combo 增加不同模塊間復用效率 不改變書寫模式的前提下優化載入性能


等新規範吧,不過也就是給個 tag 然後動態載入,webpack2 的 import 用起很方便的,以前 System.js 的也有。


就目前來說 ES6 module 還做不到按需載入, ES6 的 import 語句必須放在文件的最上層, 而且 import 的文件會一次全部載入進來。

不過你可以使用https://github.com/ModuleLoader/es-module-loader


目前ES6還不能實現按需載入,不過已經有一份提案使用import(),未來可能會支持。現在你可以使用babel對它轉碼,或者直接用require。


兄弟,別糾結,動態請使用 let xx = require("xx").default 即可


推薦閱讀:

瀏覽器直接支持ES6了,還需要編譯么?

TAG:前端開發 | JavaScript | ECMAScript2015 | Babel | webpack |