红宝书第三十九讲:写给新手的性能优化实战指南:代码拆分与缓存策略

资料取自《JavaScript高级程序设计(第5版)》
查看总目录:红宝书学习大纲


一、代码拆分(Code Splitting):像拆包裹一样优化加载12

核心目的:将庞大的代码库拆成小块,根据用户实际需要按需加载,减少首屏等待时间。

实现原理(通过模块化):
flowchart LR
    完整代码库 --> 拆分成模块A --> 用户访问页面 --> 只加载模块A
    拆分成模块B --> 按需点击时加载模块B
操作示例(现代打包工具自动拆分):
  1. 动态引入(利用import()):
// 点击按钮时加载工具库
button.addEventListener('click', async () => {
  const utils = await import('./heavy-utils.js');
  utils.doSomething();
});
  1. 路由级拆分(React/Vue框架自带):
// React中使用React.lazy
const AdminPage = React.lazy(() => import('./AdminPage'));

优势:首屏加载时间减少30%\~50%(假设案例数据)2


二、缓存策略(Caching):让重复访问闪电般快速32

两类浏览器缓存妙用
  1. 强缓存(HTTP头控制):
# 设置资源1年内不变(31536000秒)
Cache-Control: max-age=31536000
  1. 协商缓存(通过文件指纹比对):
# 请求头携带文件哈希
If-None-Match: "xyz123"
# 服务器响应304表示未修改
HTTP/1.1 304 Not Modified
构建工具实战(Webpack配置文件哈希):
// 文件名附带内容哈希(内容变则哈希变)
output: {
  filename: '[name].[contenthash].js',
}

→ 文件更新时自动生成新文件名,旧缓存失效2


三、性能提升双剑合璧效果

策略优化方向典型收益
代码拆分减少初始下载量首屏加载提速40%
缓存策略降低重复请求二次访问速度提升90%

组合示例(Mermaid流程):

flowchart LR
    用户首次访问 --> 加载核心代码A[带哈希的小文件] --> 强缓存1年
    用户点击功能X --> 按需加载模块B[独立文件] --> 协商缓存验证

目录:总目录
上篇文章:红宝书第三十八讲:新手也能懂的构建自动化:Grunt vs Gulp

下篇文章:红宝书第四十讲:React 核心概念:组件化 & 虚拟 DOM 简单教程

脚注


  1. 《JavaScript高级程序设计(第5版)》建议将代码分割为多个文件但部署时合并
  2. 《JavaScript高级程序设计(第5版)》推荐构建流程中压缩文件并使用内容哈希命名
  3. 《JavaScript高级程序设计(第5版)》提及文本编码优化与高效循环写法

kovli
13 声望6 粉丝