问题定义

本笔记旨在总结前端性能优化的常用方法,提升 Web 应用的加载速度、渲染性能和用户体验。

步骤与流程

1. 加载速度优化

核心思路:减小资源体积,减少带宽占用

  • 减少 HTTP 请求:
    • 合并 CSS 和 JavaScript 文件。
    • 使用 CSS Sprites。
    • 使用 Data URI。
    • 适用场景: 适用于 HTTP/1.1 协议,HTTP/2 协议下多路复用技术可以减少 HTTP 请求的开销。
    • 注意事项: 合并文件需要注意文件大小和依赖关系。
  • 压缩资源:
    • 压缩 HTML、CSS 和 JavaScript 文件。
    • 压缩图片和视频。
    • 字体子集化👉记录:字体子集化
    • 适用场景: 适用于所有 Web 应用。
    • 注意事项: 压缩比例过高可能会影响资源质量。
  • 使用 CDN:
    • 将静态资源部署到 CDN 上,加速用户访问。
    • 适用场景: 适用于静态资源较多的 Web 应用。
    • 注意事项: 选择合适的 CDN 服务商,并配置正确的缓存策略。
  • 启用 Gzip 压缩:
    • 对传输的资源进行 Gzip 压缩,减少传输大小。
    • 适用场景: 适用于所有 Web 应用。
    • 注意事项: 需要服务器和浏览器都支持 Gzip 压缩。
  • 优化图片:
    • 选择合适的图片格式(JPEG、PNG、WebP)。
    • 压缩图片大小。
    • 使用懒加载。
    • 适用场景: 适用于包含大量图片的 Web 应用。
    • 注意事项: 懒加载需要注意首屏图片的加载。
  • 代码分割:
    • 将代码分割成多个小块,按需加载。
    • 适用场景: 适用于大型单页应用(SPA)。
    • 注意事项: 需要合理划分代码块,避免过度分割。
  • 预加载:
    • 预加载关键资源,提高页面加载速度。
    • 适用场景: 适用于需要快速加载的关键资源。
    • 注意事项: 预加载可能会增加带宽占用。

2. 渲染性能优化

核心思路:尽量避免阻塞渲染流程

  • 减少 DOM 操作:
    • 避免频繁操作 DOM 元素。
    • 使用 DocumentFragment。
    • 适用场景: 适用于需要频繁更新 DOM 元素的 Web 应用。
    • 注意事项: 尽量批量更新 DOM 元素。
  • 优化 CSS 选择器:
    • 避免使用复杂的 CSS 选择器。
    • 使用 BEM 命名规范。
    • 适用场景: 适用于大型 CSS 项目。
    • 注意事项: 保持 CSS 选择器的简洁和可维护性。
  • 避免重绘和重排:
    • 尽量减少引起重绘和重排的操作。
    • 使用 will-change 属性。
    • 适用场景: 适用于需要频繁更新样式的 Web 应用。
    • 注意事项: 避免过度使用 will-change 属性。
  • 使用 Web Workers:
    • 将耗时的计算任务放到 Web Workers 中执行,避免阻塞主线程。
    • 适用场景: 适用于需要执行大量计算任务的 Web 应用。
    • 注意事项: Web Workers 无法直接操作 DOM 元素。
  • 优化 JavaScript 代码:
    • 避免使用耗时的 JavaScript 代码。
    • 使用 requestAnimationFrame。
    • 适用场景: 适用于需要执行复杂 JavaScript 代码的 Web 应用。
    • 注意事项: 避免在主线程中执行耗时的 JavaScript 代码。

3. 缓存优化

核心思路:利用缓存进行资源复用

  • 浏览器缓存:
    • 设置合适的 HTTP 缓存头。
    • 使用 Service Worker API
    • 适用场景: 适用于所有 Web 应用。
    • 注意事项: 需要合理配置 HTTP 缓存头和 Service Worker。
  • CDN 缓存:
    • 配置 CDN 缓存策略。
    • 适用场景: 适用于使用 CDN 的 Web 应用。
    • 注意事项: 需要合理配置 CDN 缓存策略。
  • 服务器缓存:
    • 使用 Redis、Memcached 等缓存服务器。
    • 适用场景: 适用于需要频繁访问数据库的 Web 应用。
    • 注意事项: 需要合理配置缓存服务器。

注意事项

  • 性能优化是一个持续的过程: 需要不断地学习和实践。
  • 性能优化需要结合实际情况: 不同的 Web 应用有不同的性能瓶颈。
  • 性能优化需要权衡利弊: 某些优化方法可能会带来副作用。

参考资料