1. 按需加载

通过 webpack 提供的 import() 语法 动态导入 功能进行代码分离,通过按需加载,大大提升网页加载速度。

使用方式如下:

  1. export default function App () {
  2. return (
  3. <div>
  4. hello react 111
  5. <Hello />
  6. <button onClick={() => import('lodash')}>加载lodash</button>
  7. </div>
  8. )
  9. }

2. 浏览器缓存

浏览器缓存,就是进入某个网站后,加载的静态资源被浏览器缓存,再次进入该网站后,将直接拉取缓存资源,加快加载速度。

webpack 支持根据资源内容,创建 hash id,当资源内容发生变化时,将会创建新的 hash id。

配置 JS bundle hash,webpack.common.js 配置方式如下:

  1. module.exports = {
  2. // 输出
  3. output: {
  4. // 仅在生产环境添加 hash
  5. filename: ctx.isEnvProduction ? '[name].[contenthash].bundle.js' : '[name].bundle.js',
  6. },
  7. }



配置 CSS bundle hash,webpack.prod.js 配置方式如下:

  1. module.exports = {
  2. plugins: [
  3. // 提取 CSS
  4. new MiniCssExtractPlugin({
  5. filename: "[hash].[name].css",
  6. }),
  7. ],
  8. }

配置 optimization.moduleIds,让公共包 splitChunks 的 hash 不因为新的依赖而改变,减少非必要的 hash 变动,webpack.prod.js 配置方式如下:

  1. module.exports = {
  2. optimization: {
  3. moduleIds: 'deterministic',
  4. }
  5. }

通过配置 contenthash/hash,浏览器缓存了未改动的文件,仅重新加载有改动的文件,大大加快加载速度。

3. CDN

将所有的静态资源,上传至 CDN,通过 CDN 加速来提升加载速度。

webpack.common.js 配置方式如下:

  1. export.modules = {
  2. output: {
  3. publicPath: ctx.isEnvProduction ? 'https://xxx.com' : '', // CDN 域名
  4. },
  5. }