第19章 浏览器渲染原理与性能优化

知其然,更知其所以然 | 课型:理论课 | 建议课时:2节

🏠 返回总目录 / 第19章

🎯 学习目标

知识目标

  • 理解从URL到页面显示的完整过程
  • 掌握重排与重绘的区别及优化
  • 掌握Lighthouse性能体检方法
  • 了解资源加载优化与Web安全基础

能力目标

  • 能画出浏览器渲染流水线
  • 能用Lighthouse评估并优化页面
  • 能识别并修复常见的性能杀手

德育目标

  • 培养"透过现象看本质"的探究精神
  • 树立性能即体验、体验即尊重的产品观

教学重点

  • 渲染五步:解析→样式→布局→绘制→合成
  • 重排>重绘>合成的代价阶梯
  • Lighthouse四项指标

教学难点

  • 为什么transform/opacity动画最流畅
  • 关键渲染路径的阻塞分析

💻 实例演示1个实例 · 可在线运行

▶ 重排vs重绘体验台

两个动画盒子对比:改left(重排卡顿)vs改transform(合成流畅)。

新窗口运行 下载源码

操作步骤

  1. 打开demo1.html,肉眼对比两个球的流畅度
  2. 打开Rendering面板勾选Paint flashing,观察橙色球区域持续闪烁
  3. 修改bad动画也改用transform,验证流畅化
  4. 阅读Lighthouse文档,为个人站点跑一次体检

效果观察点

  • 改left每帧触发Layout
  • transform动画由合成线程处理
  • Paint flashing直观显示重绘区域
查看核心代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>重排 vs 重绘</title>
<style>
  body { font-family: "Microsoft YaHei", sans-serif; background: #f2f6f8; margin: 0; padding: 24px; }
  .track { position: relative; height: 90px; background: #fff; border-radius: 10px; margin: 14px 0; overflow: hidden; }
  .ball { position: absolute; top: 15px; left: 0; width: 60px; height: 60px; border-radius: 50%;
          display: flex; align-items: center; justify-content: center; color: #fff; font-size: 13px; }
  .bad { background: #c05a1e; animation: bad 2s linear infinite alternate; }
  .good { background: #0f8c7f; animation: good 2s linear infinite alternate; }
  @keyframes bad { to { left: calc(100% - 60px); } }          /* 每帧触发布局 */
  @keyframes good { to { transform: translateX(calc(100vw - 120px)); } } /* 只触发合成 */
  .tag { font-size: 14px; color: #6b8a99; }
</style>
</head>
<body>
  <h1>重排 vs 合成</h1>
  <p class="tag">橙色:改变left(每帧重排)|绿色:改变transform(仅合成,GPU加速)</p>
  <div class="track"><div class="ball bad">left</div></div>
  <div class="track"><div class="ball good">transform</div></div>
  <p class="tag">打开开发者工具→更多工具→Rendering→勾选"Frame Rendering Stats"对比帧率</p>
</body>
</html>

📋 实习任务书

任务目标:理解渲染原理并完成一次真实性能优化

任务内容与评分
任务1:画出渲染五步流程图(20分)
任务2:用Paint flashing找出页面的重绘区域(15分)
任务3:把一个left动画改写为transform(20分)
任务4:为个人站点跑Lighthouse并截图四项分数(20分)
任务5:完成三项优化(图片/脚本/缓存)并复测对比(25分)

自我评价

📚 课后作业与预习