type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 介绍


浏览器性能的分析和优化是一个涉及多方面技术的复杂过程,涵盖了网络请求、渲染、JavaScript 执行、内存管理等多个方面。下面是一些常见的浏览器性能分析和优化的方法:
  1. 网络性能优化
      • 减少 HTTP 请求次数:合并文件、使用 CSS Sprites、使用图像懒加载等。
      • 使用 CDN(内容分发网络):将静态资源部署到全球各地的服务器,提高访问速度。
      • 使用缓存:利用浏览器缓存机制减少资源的重复加载。
  1. 渲染性能优化
      • 减少 DOM 元素数量:减少页面中 DOM 元素的数量,降低渲染成本。
      • 使用 CSS 动画代替 JavaScript 动画:CSS 动画通常比 JavaScript 动画性能更好。
      • 使用事件委托:将事件处理程序绑定到父元素上,而不是每个子元素上。
  1. JavaScript 执行性能优化
      • 减少重绘和回流:避免频繁修改页面样式,可以使用一次性更改样式、离线修改或者使用虚拟 DOM 等方式。
      • 避免使用过多的闭包:过多的闭包会导致内存泄漏,影响性能。
  1. 内存管理
      • 及时释放不再使用的对象:手动解除对不再需要的对象的引用,让垃圾回收器能够及时回收内存。
      • 使用轻量级的数据结构和算法:避免使用过于复杂的数据结构和算法,以降低内存消耗和提高执行效率。
  1. 性能监控和分析工具
      • 使用浏览器开发者工具:浏览器自带的开发者工具可以监控网络请求、页面渲染、JavaScript 执行等性能指标。
      • 使用第三方性能分析工具:如 Google 的 PageSpeed Insights、WebPageTest 等工具可以对页面性能进行全面的分析和评估。
通过以上方法,你可以对浏览器性能进行全面的分析和优化,提升用户体验并减少资源消耗。
 
除了常见的性能分析和优化手段外,还有一些更高级的技术和工具可以用于进一步提升浏览器性能,包括但不限于以下几个方面:
  1. Web Worker 和 Service Worker
      • 使用 Web Worker 将一些计算密集型任务从主线程中分离出来,以充分利用多核处理器。
      • 使用 Service Worker 实现离线缓存和推送通知等功能,提高应用的响应速度和可用性。
  1. 资源预加载和预解析
      • 使用 <link rel="preload"><link rel="prefetch"> 标签预加载和预解析关键资源,以加速页面加载速度。
      • 使用 <img> 标签的 loading 属性来控制图片的加载时机,提高页面渲染速度。
  1. HTTP/2 和 HTTP/3
      • 使用 HTTP/2 或者 HTTP/3 协议替代 HTTP/1.x,以减少网络请求的延迟和提高并行传输效率。
      • 使用服务器推送(Server Push)功能预先推送页面所需资源,减少客户端请求的等待时间。
  1. 渐进式 Web 应用(PWA)
      • 将 Web 应用转换为渐进式 Web 应用,以提供更快的加载速度、离线访问和本地缓存等功能,提高用户体验。
  1. 代码分割和懒加载
      • 使用代码分割技术将 JavaScript 代码拆分成多个模块,按需加载,以减少初始加载时间。
      • 使用懒加载技术延迟加载页面中的非关键资源,提高页面的首次渲染速度。
  1. 渲染优化技术
      • 使用 WebAssembly 将性能敏感的任务委托给更高效的原生代码,以提高页面的渲染性能。
      • 使用虚拟列表(Virtual List)等技术优化大型列表或表格的渲染性能,避免渲染大量不可见元素。
  1. 性能监控和自动化工具
      • 使用性能监控工具(如Lighthouse、SpeedCurve等)进行定期的性能评估和监控,及时发现并解决性能问题。
      • 使用自动化构建工具(如Webpack、Rollup等)配置优化策略,自动化处理性能优化任务,提高开发效率。
       

优化方向:

  1. 适当的使用懒加载和预加载
  1. 本地图片使用webp格式
  1. 开启gzip压缩
  1. 缩小http头部大小
  1. 一些静态资源使用dns预解析
  1. 接口使用并发处理, 考虑负载均衡. (最好上GraphQL)
  1. 使用WebAssembly或者web worker计算大量的密集型任务
  1. 使用数据预取, 合适的时机提前获取获取并缓存起来
  1. 使用Next.js并开启流式服务端渲染

 

分析工具的使用:

  • Performance 面板 - 看白屏时间、FPS曲线有没有标红(如果标红则说明页面有渲染卡顿的地方)、看下是否有资源加载的空白期,是否充分利用资源加载的空闲时间
    • 火焰图 - 每个Task如果耗时过长右上角会标红、定位耗时函数
    • Timings :
      • FCP: First Contentful Paint
      • LCP: Largest Contentful Paint
      • FMP: First Meaningful Paint
      • DCL: DOMContentLoaded Event
      • L: Onload Event
    • JS Heap(堆) - 查看是否有内存泄漏情况
    • Scripting - 如果Scripting时间过长,需要优化渲染过程,如果idle时间过多,则考虑充分利用空闲时间渲染
  • Layers - 查看页面分层情况、分析动画卡顿、是否开启GPU加速等
  • Audits(Lighthouse)
主要指标:
  • FCP(First Contentful Paint)白屏时间,值越低越好;
  • SI(Speed Index)页面渲染时间,值越低越好;
  • LCP(Largest Contentful Paint)可视窗口最大内容渲染时间,值越低越好;
    • 监测最大元素:
    • TTI(Time to Interactive)用户可交互时间,值越低越好;
    • TBT(Total Blocking Time)用户行为阻塞时间,值越低越好;
    • CLS(Cumulative Layout Shift)可视窗口中累计可见元素布局偏移;
    • FID(First Input Delay)用户首次交互时间,值越低越好
     
    浏览器自带远程调试工具
    chrome://inspect/#devices
     
     
    相关文章
    泛前端浏览器的进程与线程
    • Giscus
    • Utterance