type
status
date
slug
summary
tags
category
icon
password
这里写文章的前言:
一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 介绍
浏览器性能的分析和优化是一个涉及多方面技术的复杂过程,涵盖了网络请求、渲染、JavaScript 执行、内存管理等多个方面。下面是一些常见的浏览器性能分析和优化的方法:
- 网络性能优化:
- 减少 HTTP 请求次数:合并文件、使用 CSS Sprites、使用图像懒加载等。
- 使用 CDN(内容分发网络):将静态资源部署到全球各地的服务器,提高访问速度。
- 使用缓存:利用浏览器缓存机制减少资源的重复加载。
- 渲染性能优化:
- 减少 DOM 元素数量:减少页面中 DOM 元素的数量,降低渲染成本。
- 使用 CSS 动画代替 JavaScript 动画:CSS 动画通常比 JavaScript 动画性能更好。
- 使用事件委托:将事件处理程序绑定到父元素上,而不是每个子元素上。
- JavaScript 执行性能优化:
- 减少重绘和回流:避免频繁修改页面样式,可以使用一次性更改样式、离线修改或者使用虚拟 DOM 等方式。
- 避免使用过多的闭包:过多的闭包会导致内存泄漏,影响性能。
- 内存管理:
- 及时释放不再使用的对象:手动解除对不再需要的对象的引用,让垃圾回收器能够及时回收内存。
- 使用轻量级的数据结构和算法:避免使用过于复杂的数据结构和算法,以降低内存消耗和提高执行效率。
- 性能监控和分析工具:
- 使用浏览器开发者工具:浏览器自带的开发者工具可以监控网络请求、页面渲染、JavaScript 执行等性能指标。
- 使用第三方性能分析工具:如 Google 的 PageSpeed Insights、WebPageTest 等工具可以对页面性能进行全面的分析和评估。
通过以上方法,你可以对浏览器性能进行全面的分析和优化,提升用户体验并减少资源消耗。
除了常见的性能分析和优化手段外,还有一些更高级的技术和工具可以用于进一步提升浏览器性能,包括但不限于以下几个方面:
- Web Worker 和 Service Worker:
- 使用 Web Worker 将一些计算密集型任务从主线程中分离出来,以充分利用多核处理器。
- 使用 Service Worker 实现离线缓存和推送通知等功能,提高应用的响应速度和可用性。
- 资源预加载和预解析:
- 使用
<link rel="preload">
和<link rel="prefetch">
标签预加载和预解析关键资源,以加速页面加载速度。 - 使用
<img>
标签的loading
属性来控制图片的加载时机,提高页面渲染速度。
- HTTP/2 和 HTTP/3:
- 使用 HTTP/2 或者 HTTP/3 协议替代 HTTP/1.x,以减少网络请求的延迟和提高并行传输效率。
- 使用服务器推送(Server Push)功能预先推送页面所需资源,减少客户端请求的等待时间。
- 渐进式 Web 应用(PWA):
- 将 Web 应用转换为渐进式 Web 应用,以提供更快的加载速度、离线访问和本地缓存等功能,提高用户体验。
- 代码分割和懒加载:
- 使用代码分割技术将 JavaScript 代码拆分成多个模块,按需加载,以减少初始加载时间。
- 使用懒加载技术延迟加载页面中的非关键资源,提高页面的首次渲染速度。
- 渲染优化技术:
- 使用 WebAssembly 将性能敏感的任务委托给更高效的原生代码,以提高页面的渲染性能。
- 使用虚拟列表(Virtual List)等技术优化大型列表或表格的渲染性能,避免渲染大量不可见元素。
- 性能监控和自动化工具:
- 使用性能监控工具(如Lighthouse、SpeedCurve等)进行定期的性能评估和监控,及时发现并解决性能问题。
- 使用自动化构建工具(如Webpack、Rollup等)配置优化策略,自动化处理性能优化任务,提高开发效率。
优化方向:
- 适当的使用懒加载和预加载
- 本地图片使用webp格式
- 开启gzip压缩
- 缩小http头部大小
- 一些静态资源使用dns预解析
- 接口使用并发处理, 考虑负载均衡. (最好上GraphQL)
- 使用WebAssembly或者web worker计算大量的密集型任务
- 使用数据预取, 合适的时机提前获取获取并缓存起来
- 使用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
相关文章
- Author:GDYG
- URL:https://gdyg5.top/article/broswer-performance
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts