【性能】7分钟带你了解【尤大】都在使用的 Chrome Runtime Performance Debug!

简介: 前段时间用Vue3开发了一个线上标准的项目,也都已经提测了,最近可以抽时间来整理一下项目中用到的技术栈,( 我用前端【最新】技术栈完成了一个生产标准的项目【Vue3 + TS + Vite + Pinia + Windicss + NavieUI】。在开发之前特地重温了一下18年尤大的VUE CONF(杭州),过程中发现尤大使用到了这个Performance去分析JavaScript每一帧的计算,之前知道这个工具,但是平时基本不怎么用,借此机会学一下并做一些记录。

前言

前段时间用Vue3开发了一个线上标准的项目,也都已经提测了,最近可以抽时间来整理一下项目中用到的技术栈,( 我用前端【最新】技术栈完成了一个生产标准的项目【Vue3 + TS + Vite + Pinia + Windicss + NavieUI】

在开发之前特地重温了一下18年尤大的VUE CONF(杭州),过程中发现尤大使用到了这个Performance去分析JavaScript每一帧的计算,之前知道这个工具,但是平时基本不怎么用,借此机会学一下并做一些记录。

关于 Chrome Performance

众所周知,身为前端开发,我们最常用的就是Chrome,但是很多人其实都不太了解Chrome Performance,因为一打开它,迎面而来的就是各种复杂的图表📈和信息,不知道该从何看起,的确,Chrome Performance提供了相当丰富的信息,今天聊一下基本的信息与图标,以备应对日常Debug时的需求,话不多说,开干!

Start Debug

两个选择,打开无痕窗口或者确保自己的chrome是clean的

网络异常,图片无法展示
|

紧接着随便进入一个web页,这儿我就用 自己的博客网站,然后打开控制台,选择Performance

网络异常,图片无法展示
|

左上角的⭕️代表开始记录,点击之后,操作网页,Devtool会记录当前操作网页时的一些指标,比较时候我们做一些交互类或者反馈类的操作的监测。

左上角的刷新按钮代表开始刷新,并在页面无互动之后自动停止。

我这选择对整个网页进行Profiling分析,点击刷新按钮,一段时间后Devtool就会出现结果:

网络异常,图片无法展示
|

接下来开始分析Profiling的结果。

先来看一下最上面这部分的记录📝

网络异常,图片无法展示
|

FPS

FPS是网页动画性能最直接的体现,他的全称是Frames Per Second(每秒传输帧数),其实就是平常我们所说的,打游戏的同学可能会比较了解,人类的肉眼对动画的感知度60FPS是一个较好的水平,

网络异常,图片无法展示
|

可以看到这个位置有一个粉红色&红色组合的条,代表页面在加载到这个位置可能出现了掉帧的情况,所以这可以着重优化。

CPU

CPU的消耗在页面加载的过程中是有浮动的,很正常,我们可以通过view screenshot详细的追踪

网络异常,图片无法展示
|

可以观看这个位置,查看详细的信息:

网络异常,图片无法展示
|

这里重点介绍一下这些信息是干什么的。

Idle: Idle Time指程序空闲时间
System: 浏览器内部处理时间
Painting: 页面绘制时间
Rendering: 样式渲染计算时间
Scripting: JS的执行&处理各种事件的时间
复制代码

其实看到这个基本上已经获取到了很多信息了,介可以根据相应的情况,处理相应的问题。

Memory

网络异常,图片无法展示
|

网络异常,图片无法展示
|
内存这块其实也可以做很多文章,比如如果 JS Heap过长,我们可以检查一下是否项目中存在闭包的内存溢出问题, Documents是整个页面在内存中的占用情况。

Frames

网络异常,图片无法展示
|

记载的是每一次更新的screenshot,每一次更新就是一次frame,如果长时间没有更新就会出现 long frame。

网络异常,图片无法展示
|

点击screenshot可以根据时间顺序浏览捕捉到的frame。

Timing


Timing 可以看到网页加载时的时间线

网络异常,图片无法展示
|


主要说一下这几个指标是什么意思:

  • FP(First Paint) 像素绘制的时间
  • FCP(First Contentful Paint) 首次内容绘制,建立HTTP连接到达网站后,首次显示网站的内容需要部分时间。
  • DCL(DOM Content Loaded) HTML载入并解析完毕的时间
  • LCP(Largest Contentful Paint) 计算网页viewport中最大元素的载入时间,通俗来说就是用户可见网页主要内容的时间,这个比较重要
  • L(onload) 解析HTML后资源全部加载完成的时间

在最下方有一行Total blocking time,这个是指在profiling的过程中,浏览器Main Thread被阻塞的时间总和。

网络异常,图片无法展示
|

Network

可以看到在网页加载的过程中,一些资源在请求加载时的网络占用情况,以及一些详细信息(URL、Duration、Request Method、Priority、Mime Type、Encoded Data、Decoded Body),但其实我们用Network就可以完成这个信息的获取了,所以这里就不多展开了。

网络异常,图片无法展示
|

Main

网络异常,图片无法展示
|


可以看到这个地方有很多的CPU Task,而且用这种倒转的火焰图,表现出,下面的function或者task是由上一层的task触发的,根据这个特性,我们可以方便的去追踪task 和 function 之间的依赖关系。

总结

我认为Chrome Performance可以在我发现页面部分地方卡顿,或者出现响应慢的时候,帮我快速的定位问题所在(比如FPS、CPU、Memory),然后根据问题找解决方案,可以在必要的时候大幅提高我debug的能力,Chrome Performance大概就说这么多,其实他还有很多信息,以后可以多研究研究。


目录
相关文章
|
4月前
|
Web App开发 缓存 监控
如何使用 Chrome DevTools 的 Performance 面板进行页面加载性能分析?
如何使用 Chrome DevTools 的 Performance 面板进行页面加载性能分析?
|
3月前
|
Web App开发 JavaScript 前端开发
Electron V8排查问题之Chrome DevTools 的 Performance 工具的使用如何解决
Electron V8排查问题之Chrome DevTools 的 Performance 工具的使用如何解决
65 0
|
6月前
|
Web App开发 SQL 前端开发
性能工具之前端分析工Chrome Developer Tools性能标签
【2月更文挑战第22天】性能工具之前端分析工Chrome Developer Tools性能标签
70 1
性能工具之前端分析工Chrome Developer Tools性能标签
|
Web App开发 JavaScript 前端开发
VS Code 折腾记 - (17) Debug for Chrome(附加模式[支持浏览器插件的使用])
很早以前就撸过一篇帖子,也是说这个的,但是那时候只是用最傻瓜化的直白的姿势. 新窗口模式,而且配置文件用的是临时文件,拓展这些更是不能用. 用起来感觉不是很好,但时隔一年多,不管是vscode还是当初的插件都完善了很多. 研究了下附加模式,并让拓展也能正常使用的姿势(挺简单的). 用到的插件VSCode插件:
481 0
|
Web App开发 前端开发 JavaScript
Chrome 87 新特性解读,多年来 Chrome 性能最大提升!
今天 Chrome 更新了 87 最新版,这是今年最后一次 Chrome 更新了,这个版本是多年来 Chrome 性能获得最大提升的一次,开发者工具也进行了大幅度更新。 有用户认为,原本 Chrome 的性能问题诟病已久,然而在新 Edge 出来了以后,性能突然就提升了,这显然是谷歌方面受到了 Edge 市场份额暴增带来的压力。 另外,在 Mac 上的 Chrome 还更新了图标,这应该是为了适配 Big Sur 专门进行的设计。
Chrome 87 新特性解读,多年来 Chrome 性能最大提升!
|
JavaScript 前端开发 Web App开发
Chrome性能专家Addy Osmani教你优化JavaScript
不确定 JavaScript 的开销对你的用户体验影响是否太大了?
689 0
|
Web App开发 JavaScript 安全
浅析Google Chrome 2.0浏览器安全性能
  最新版本的Chrome增加了很多“花里胡哨”的功能以及超快的速度,那么它的安全性能怎样呢?   浏览器供应商一直在努力研究如何对付日益增长的网络安全威胁,微软公司的IE8就增加了很多安全功能,而在最新版本的Google浏览器中,Google公司还增加了一些“幕后的”保护功能,包括抵御伪跨站请求和clickjacking等。
963 0
|
Web App开发 缓存 网络协议
|
Web App开发 前端开发 JavaScript
|
Web App开发 监控 JavaScript
Chrome开发者工具Debug入门
译者按: 手把手教你摆脱console.log,掌握高级的debug方法。 原文: Learn How To Debug JavaScript with Chrome DevTools 译者: Fundebug 为了保证可读性,本文采用意译而非直译。
1090 0