性能分析工具
Chrome DevTools
1. Performance面板
功能介绍
Performance面板是Chrome DevTools中用于分析页面性能的核心工具,可以录制和分析页面的加载、渲染和交互性能。
使用方法
打开Performance面板:
- 按F12打开Chrome DevTools
- 点击"Performance"标签
录制性能:
- 点击录制按钮(圆形图标)
- 执行需要分析的操作(如页面加载、点击按钮等)
- 点击停止按钮(方形图标)
分析结果:
- 概览面板:查看FPS、CPU、内存使用情况
- 火焰图:查看函数执行时间和调用关系
- 网络请求:查看网络请求的时间和顺序
- 主线程:查看主线程的任务执行情况
关键指标
- FPS:每秒帧数,绿色柱状图越高越好
- CPU:CPU使用率,颜色表示不同类型的操作
- 内存:内存使用情况,包括JS堆、文档、DOM节点等
- Network:网络请求时间线
- Main:主线程任务执行时间线
性能瓶颈识别
- 长任务:执行时间超过50ms的任务,会阻塞主线程
- 重排:黄色块,表示布局计算
- 重绘:紫色块,表示绘制操作
- 网络延迟:红色块,表示网络请求等待时间
示例分析
javascript
// 录制性能后,查看火焰图
// 识别长任务
function longTask() {
// 执行时间超过50ms的任务
for (let i = 0; i < 1000000; i++) {
// 计算
}
}
// 优化:拆分为多个短任务
function optimizedTask() {
let i = 0;
function processChunk() {
const end = Math.min(i + 10000, 1000000);
for (; i < end; i++) {
// 计算
}
if (i < 1000000) {
requestAnimationFrame(processChunk);
}
}
processChunk();
}2. Memory面板
功能介绍
Memory面板用于分析页面的内存使用情况,包括堆快照、内存分配时间线和分配采样。
使用方法
堆快照(Heap snapshot):
- 选择"Take heap snapshot"
- 点击"Take snapshot"
- 等待快照生成
- 查看对象的内存使用情况
内存分配时间线(Allocation timeline):
- 选择"Allocation timeline"
- 点击录制按钮
- 执行操作
- 停止录制
- 查看内存分配情况
分配采样(Allocation sampling):
- 选择"Allocation sampling"
- 点击录制按钮
- 执行操作
- 停止录制
- 查看内存分配的函数调用栈
内存泄漏检测
堆快照比较:
- 拍摄初始快照
- 执行可能导致内存泄漏的操作
- 拍摄新快照
- 选择"Comparison"视图,查看增加的对象
内存分配时间线:
- 录制内存分配
- 查看持续增长的内存分配
- 识别导致内存泄漏的代码
示例分析
javascript
// 内存泄漏示例
let elements = [];
function createElements() {
for (let i = 0; i < 100; i++) {
const element = document.createElement('div');
element.textContent = `Element ${i}`;
elements.push(element);
}
}
// 优化:清理DOM引用
function cleanupElements() {
elements = [];
}3. Network面板
功能介绍
Network面板用于分析网络请求的性能,包括请求时间、大小、优先级等。
使用方法
打开Network面板:
- 按F12打开Chrome DevTools
- 点击"Network"标签
录制网络请求:
- 刷新页面或执行操作
- 查看网络请求列表
分析结果:
- 请求列表:查看请求的详细信息
- 时间线:查看请求的时间顺序
- 瀑布图:查看请求的各个阶段的时间
关键指标
- Name:请求的名称
- Status:HTTP状态码
- Type:请求的类型
- Initiator:请求的发起者
- Size:响应的大小
- Time:请求的总时间
- Waterfall:请求的各个阶段的时间
网络优化识别
- 大文件:响应大小较大的文件
- 慢请求:总时间较长的请求
- 重复请求:重复的网络请求
- 未压缩的文件:没有启用压缩的文件
- 未缓存的文件:没有设置缓存的文件
示例分析
javascript
// 网络请求优化
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));
// 优化:使用缓存
fetch('https://api.example.com/data', {
headers: {
'Cache-Control': 'max-age=3600'
}
})
.then(response => response.json())
.then(data => console.log(data));4. Lighthouse面板
功能介绍
Lighthouse是一个开源工具,用于评估网页的质量,包括性能、可访问性、最佳实践、SEO和PWA。
使用方法
打开Lighthouse面板:
- 按F12打开Chrome DevTools
- 点击"Lighthouse"标签
配置和运行:
- 选择评估类别(性能、可访问性、最佳实践、SEO、PWA)
- 选择设备类型(移动设备、桌面设备)
- 点击"Generate report"
- 等待报告生成
分析结果:
- 性能得分:0-100分,越高越好
- 核心Web指标:LCP、FID、CLS的得分
- 机会:可以改进的项目
- 诊断:性能问题的诊断
- 通过的审计:符合最佳实践的项目
性能建议
- 减少未使用的JavaScript:移除或延迟加载未使用的JavaScript
- 减少未使用的CSS:移除未使用的CSS
- 优化图片:压缩图片,使用适当的格式
- 启用文本压缩:启用gzip或brotli压缩
- 使用浏览器缓存:设置适当的缓存头
- 减少服务器响应时间:优化服务器性能
示例分析
javascript
// Lighthouse报告建议
// 减少未使用的JavaScript
// 优化:代码分割
import('./module.js').then(module => {
module.doSomething();
});
// 优化图片
// 使用WebP格式
<picture>
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="图片">
</picture>5. Rendering面板
功能介绍
Rendering面板用于分析页面的渲染性能,包括绘制区域、帧率、布局偏移等。
使用方法
打开Rendering面板:
- 按F12打开Chrome DevTools
- 点击"More tools" → "Rendering"
启用功能:
- Paint flashing:高亮显示重绘区域
- Layout shifts:高亮显示布局偏移
- FPS meter:显示实时FPS
- Layer borders:显示合成层边框
- Frame rendering stats:显示帧渲染统计信息
渲染优化识别
- 重绘区域:高亮显示的区域,越大越差
- 布局偏移:高亮显示的元素移动,越少越好
- 帧率:FPS越低,性能越差
- 合成层:过多的合成层会影响性能
示例分析
javascript
// 渲染优化
// 不好的做法:使用left/top
function animate() {
element.style.left = '10px';
element.style.top = '10px';
}
// 好的做法:使用transform
function animateOptimized() {
element.style.transform = 'translate(10px, 10px)';
} 加载中...