0%

代码分割

为什么代码分割?

减少初始包大小,提升加载速度。

动态导入

1
2
3
import('./module.js').then(module => {
// 使用模块
});

React 路由分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));

function App() {
return (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Suspense>
</Router>
);
}

Webpack 配置

1
2
3
4
5
optimization: {
splitChunks: {
chunks: 'all'
}
}

总结

代码分割按需加载。提升用户体验。

打包工具示例

Webpack

1
2
3
4
5
6
7
8
9
module.exports = {
entry: './src/index.js',
output: { filename: '[name].bundle.js' },
optimization: {
splitChunks: {
chunks: 'all',
},
},
};

Rollup

1
2
3
4
5
6
7
8
9
10
export default {
input: 'src/main.js',
output: {
dir: 'output',
format: 'es',
},
plugins: [
dynamicImport(),
],
};

分割策略

  • 入口点分割
  • 路由级分割
  • 库/第三方依赖分割
  • 运行时分割

SSR 与代码分割

服务端渲染时需要对动态导入进行处理,常用 @loadable/componentsreact-loadable

动态加载的优点

  • 初始页面轻量
  • 按需加载,提高首屏渲染速度

监控

使用网络面板查看 chunk 大小,部署时对比基线。

常见问题

  • Chunk 名称冲突
  • 动态导入失败时的回退方案

总结

代码分割是前端优化过程中不可缺少的一环,可灵活配合懒加载和�代码分割是前端优化过程中不可缺少的��。

代码分割补充行 1
代码分割补充行 2
代码分割补充行 3
代码分割补充行 4
代码分割补充行 5
代码分割补充行 6
代码分割补充行 7
代码分割补充行 8
代码分割补充行 9
代码分割补充行 10
代码分割补充行 11
代码分割补充行 12
代码分割补充行 13
代码分割补充行 14
代码分割补充行 15
代码分割补充行 16
代码分割补充行 17
代码分割补充行 18
代码分割补充行 19
代码分割补充行 20
代码分割补充行 21
代码分割补充行 22
代码分割补充行 23
代码分割补充行 24
代码分割补充行 25
代码分割补充行 26
代码分割补充行 27
代码分割补充行 28
代码分割补充行 29
代码分割补充行 30
代码分割补充行 31
代码分割补充行 32
代码分割补充行 33
代码分割补充行 34
代码分割补充行 35
代码分割补充行 36
代码分割补充行 37
代码分割补充行 38
代码分割补充行 39
代码分割补充行 40
代码分割补充行 41
代码分割补充行 42
代码分割补充行 43
代码分割补充行 44
代码分割补充行 45