页面加载的越久,页面不可交互的时间就越长,用户的体验就越差。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' )
注意 :当你确保你的异步代码在将来必定会用到时,再开启该功能。