@@ -6,11 +6,15 @@
# # # 打开网站的初体验
我们以淘宝网站为例 。
我们以淘宝网站为例 , 按下F12打开浏览器的调试模式 。
! [ ] ( http : //img.smyhvae.com/20210115_1601.png)
上图中 , 鼠标长按刷新图标 , 松开鼠标后 , 会弹出三个选项 , 我们选择最后一个选项 “ 清空缓存并硬性重新加载 ” 。 PS : 只有淘宝等少数网站有这个选项 , 其他很多网站都没有 。
上图中 , 鼠标右键点击 “ 刷新 ” 图标 ( 或者鼠标 长按刷新图标 , 松开鼠标后 ) , 会弹出三个选项 , 我们选择最后一个选项 “ 清空缓存并硬性重新加载 ” 。
补充 : 这三个选项都是在调试模式下 ( 按下F12弹出调试面板 ) 才会出现的 。
浏览器的DevTools初印象 :
! [ ] ( https : //img.smyhvae.com/20210115_1617.png)
@@ -18,7 +22,7 @@
我们可以看到淘宝网站的一些指标 :
- 资源量是 1.3 M 。
- 总 资源量是 1.3 M 。
- DOM加载完成时间 ( DOMContentLoaded ) : 511 ms 。 这是一个很关键的指标 。
- 其他资源的总加载时间是 1.05 秒 。
@@ -335,6 +339,106 @@ Timing参数中, 尤其注意看`DCL`( DOMContentLoaded) , 即DOM加载完
# # 使用LightHouse分析性能
我们之所以使用不同的性能测量工具 , 是因为他们都有不同的特点 。 这一段要讲的 lighthouse 既可以帮我们生成简易的测试报告 , 还可以给出一些针对性的优化建议 。 后面要讲的 WebPageTest 可以帮我们生成详细的性能测试报告 。
我们先来看看 Lighthouse 。
# # # Lighthouse 介绍
! [ ] ( http : //img.smyhvae.com/20210115-1739.png)
lighthouse 是 chrome 浏览器的一个性能测量工具 。 我们先来看看它的性能指标 , 至于它具体使用 , 后续的内容再详细介绍 。
淘宝跑分举例 :
! [ ] ( http : //img.smyhvae.com/20210115-1758.png)
京东跑分举例 :
! [ ] ( http : //img.smyhvae.com/20210115-1759.png)
Lighthouse 跑分里 , 最重要的两个指标如下 :
- * * First Contentful Paint ( 白屏时间 ) * * : * * 从白屏到第一次出现内容的时间 。 * * 我们可以看到 , 上面提供了一些加载过程的截图 , 10 屏里如果只有1到2屏是白屏 , 说明体验还是可以的 。
- * * Speed Index * * : 速度指数 。
我们不需要关心这个指数是怎么来的 , 因为背后涉及一套很复杂的公式 , 我们暂时只需关注这个数值 。
Speed Index 标准为4秒 ( 超过4秒算比较慢的 ) , 我们测的淘宝的 speed index 是0 . 5 s , 很快了 。 但我们要结合网站本身的业务来 * * 权衡 * * 。 并不是分数越高性能越高 , 比如百度这样的网站 , 页面上的内容很少 , 测出来的分数肯定很完美 。 而淘宝需要展示很多内容给用户看 。 所以 , 这个指标只是一个指导作用 , 并不一定能够达到最优的数值 。
Lighthouse 的分析结果里 , 也给出了颜色标注 :
- 红色 : 比较严重的性能问题
- 黄色 : 需要做适当优化
- 绿色 : 说明性能表现很好 。
另外 , Lighthouse 还会给出一些优化建议 :
- Opportunities : 优化建议 。
- Diagnostics : 问题诊断 。
- Passed audits : 表示这部分没有问题 。
# # # 举例 : 确认某个JS 是否必须在首屏加载
就拿B站来举例 , 来看看它的lighthouse报告 :
! [ ] ( http : //img.smyhvae.com/20210116_0107.png)
上图中给出了一个优化建议 : 有些JS文件不是首屏加载必须的 。
! [ ] ( http : //img.smyhvae.com/20210116_0108.png)
我们随便拿一个JS文件来测试 ( 比如上图中 , Header标签里的JS文件 ) 。 做法如下 :
! [ ] ( http : //img.smyhvae.com/20210116-0901.png)
如上图所示 , 在 chrome 控制台输入快捷键 「 Cmd + Shift + P 」 , 然后输入文本 ` block ` , 选择 ` Show Network request blocking ` :
! [ ] ( http : //img.smyhvae.com/20210116-0903.png)
按照上面的步骤添加规则 , 点击add后 , 效果如下 :
! [ ] ( http : //img.smyhvae.com/20210116-0904.png)
然后 , 我们切换到控制台的 network面板 , 并刷新页面 :
! [ ] ( http : //img.smyhvae.com/20210116-0905.png)
然后观察这个js资源是不是首屏加载所必须的 。 但我们也不能就此定论说这个资源一定可以延迟加载 , 也许它就是想让页面在一开始loading的时候就捕获日志 。
对于我们自己的网站 , 这个资源是首屏加载必须的吗 ? 一定要在第一时间加载吗 ? 需要根据特定的业务做衡量 。
# # # 通过npm运行 Lighthouse工具
` ` ` bash
# 安装
npm install - g lighthouse
# 执行
lighthouse https : //www.jd.com
# 输出性能检测报告
Generating results ...
html output witten to / Users / smyh / Documents / wpt - mac - agent / www . jd . com . _2021 - 01 - 16_09 - 00 - 00. html
` ` `
# # 使用 WebPageTest 评估网站性能
@@ -422,90 +526,23 @@ First View展示的是: 首次访问时, 总的加载时间。这里面提供
我们可以在局域网部署 WebPageTest 工具 , 具体方法可自行研究 。
# # 使用LightHouse分析性能
我们之所以使用不同的性能测量工具 , 是因为他们都有不同的特点 。 WebPageTest 可以生成详细的性能测试报告 ; 而 接下来要讲的 lighthouse 不仅可以帮我们生成测试报告 , 还可以给出一些针对性的优化建议 。
# # # Lighthouse 介绍
! [ ] ( http : //img.smyhvae.com/20210115-1739.png)
lighthouse 是 chrome 浏览器的一个性能测量工具 。 我们先来看看它的性能指标 , 至于它具体使用 , 后续的内容再详细介绍 。
淘宝跑分举例 :
# # chrome插件 : PageSpeed Insights
! [ ] ( http : //img.smyhvae.com/20210115-1758.png)
京东跑分举例 :
另外 , google官方也有一个网址 : https : //developers.google.com/speed/pagespeed/insights/?hl=zh-cn
! [ ] ( http : //img.smyhvae.com/20210115-1759.png)
但是这个网站在使用时 , 经常挂掉 。
这个插件是2018年的 , 已经好几年没更新了 。 大家参考即可 。
Lighthouse 跑分里 , 最重要的两个指标如下 :
- * * First Contentful Paint * * : * * 从白屏到第一次出现内容的时间 。 * * 我们可以看到 , 上面提供了一些加载过程的截图 , 10 屏里如果只有1到2屏是白屏 , 说明体验还是可以的 。
- * * Speed Index * * : 速度指数 。
我们不需要关心这个指数是怎么来的 , 因为背后涉及一套很复杂的公式 , 我们暂时只需关注这个数值 。
Speed Index 标准为4秒 ( 超过4秒算比较慢的 ) , 我们测的淘宝的 speed index 是0 . 5 s , 很快了 。 但我们要结合网站本身的性质来权衡 。 并不是分数越高性能越高 , 比如百度这样的网站 , 页面上的内容很少 , 测出来的分数肯定很完美 。 而淘宝需要展示很多内容给用户看 。 所以 , 这个指标只是一个指导作用 , 并不一定能够达到最优的数值 。
另外 , Lighthouse 还会给出一些优化建议 :
- Opportunities : 优化建议 。
- Diagnostics : 问题诊断 。
- Passed audits : 表示这部分没有问题 。
# # # 举例 : 确认某个JS 是否必须在首屏加载
就拿B站来举例 , 来看看它的lighthouse报告 :
! [ ] ( http : //img.smyhvae.com/20210116_0107.png)
上图中给出了一个优化建议 : 有些JS文件不是首屏加载必须的 。
! [ ] ( http : //img.smyhvae.com/20210116_0108.png)
我们随便拿一个JS文件来测试 ( 比如上图中 , Header标签里的JS文件 ) 。 做法如下 :
! [ ] ( http : //img.smyhvae.com/20210116-0901.png)
如上图所示 , 在 chrome 控制台输入快捷键 「 Cmd + Shift + P 」 , 然后输入文本 ` block ` , 选择 ` Show Network request blocking ` :
! [ ] ( http : //img.smyhvae.com/20210116-0903.png)
按照上面的步骤添加规则 , 点击add后 , 效果如下 :
! [ ] ( http : //img.smyhvae.com/20210116-0904.png)
然后 , 我们切换到控制台的 network面板 , 并刷新页面 :
! [ ] ( http : //img.smyhvae.com/20210116-0905.png)
然后观察这个js资源是不是首屏加载所必须的 。 但我们也不能就此定论说这个资源一定可以延迟加载 , 也许它就是想让页面在一开始loading的时候就捕获日志 。
对于我们自己的网站 , 这个资源是首屏加载必须的吗 ? 一定要在第一时间加载吗 ? 需要根据特定的业务做衡量 。
# # # 通过npm运行 Lighthouse工具
` ` ` bash
# 安装
npm install - g lighthouse
# 执行
lighthouse https : //www.jd.com
# 输出性能检测报告
Generating results ...
html output witten to / Users / smyh / Documents / wpt - mac - agent / www . jd . com . _2021 - 01 - 16_09 - 00 - 00. html
` ` `