頁面加載的越久,頁面不可交互的時間就越長,用戶的體驗就越差。javascript
只有 Chrome 可以查看你的代碼覆蓋率。java
聽從這個目標,應用將能在任何平臺(PC,Mobile Phone...)都擁有良好的性能:react
Cmd + Shift + P
or Ctrl + Shift + P
;Coverage
,選擇第一個出現的選項:reload
按鈕,查看整個應用 JavaScript 的代碼覆蓋率:什麼是 code splitting?
將部分代碼在構建時轉變爲異步加載的過程。webpack
代碼分割的核心是異步加載資源,而異步加載功能使用到 stage 3 規範:whatwg/loader。import()
容許你在瀏覽器端運行時動態獲取資源,雖然它存在如下一些問題:web
import Listener from './listeners.js' const getModal = () => import('./src/modal.js') Listener.on('didSomethingToWarrentModalBeingLoaded', () => { // Async fetching modal code from a separate chunk getModal().then((module) => { const modalTarget = document.getElementById('Modal') module.initModal(modalTarget) }) })
注意:json
import()
關鍵字,在 React 中,使用 react-loadable
完成一樣的事;const getTheme = (themeName) => import(`./src/themes/${themeName}`) // using `import()` 'dynamically' if (window.feeling.stylish) { getTheme('stylish').then((module) => { module.applyTheme() }) } else if (window.feeling.trendy) { getTheme('trendy').then((module) => { module.applyTheme() }) }
這背後的原理是,webpack 將目錄中全部能夠分離的 JavaScript 文件都生成了被稱爲 contextModule
的模塊,因此本質上仍然是靜態的。api
魔術註釋技術是爲代碼分割技術服務的,它表現爲在 import
關鍵字前使用指定註釋來控制 webpack 生成的分割後代碼片斷。瀏覽器
import ( /* webpackChunkName: "my-chunk-name" */ './footer' )
同時,你須要在 webapck.config.js 中添加配置:安全
{ output: { filename: "bundle.js", chunkFilename: "[name].lazy-chunk.js" } }
webpack 提供了一些註釋讓咱們可以選擇異步加載的模塊應該被怎樣組織:網絡
import ( /* webpackChunkName: "my-chunk-name" */ /* webpackMode: lazy */ './someModule' )
webpackMode
的默認值爲 lazy
,指全部異步模塊都會被單獨抽離成單一的 chunk,經過使用 lazy-once
值,能夠將全部的異步加載模塊放在同一個 chunk 中。
經過開啓 prefetch
,咱們能夠經過使用 <link rel="prefetch>"
的特性,讓瀏覽器在空閒時幫咱們預先加載咱們的異步資源,這有助於提高應用性能。
import( /* webpackPrefetch: true */ './someModule' )
注意 :當你確保你的異步代碼在將來必定會用到時,再開啓該功能。