一种基于chrome trace的白屏问题排查方法

裴宣
• 阅读 1581

问题发生在前不久。刚开发完的功能被测试人员发现了问题。如下图所示,在两个页面跳转过程中,会出现闪一下白屏的情况。于是我开始排查这个问题。

一种基于chrome trace的白屏问题排查方法

搭建排查环境与定位问题

由于前后两个页面都是移动端APP内的页面,因此使用chrome进行调试。

第一步,在手机上开启USB开发者模式。从APP中进入要调试的网页。

第二步,在电脑使用以下命令行运行chrome

`/Applications/Google Chrome.app/Contents/MacOs/Google Chrome --enable-threaded-compositing --force-compositing-mode --enable-impl-side-painting --enable-skia-benchmarking --allow-webui-compositing
`

打开chrome://inspect,即可看到打开的网页,如下图所示。此处因为涉及公司信息,做了打码处理。

一种基于chrome trace的白屏问题排查方法

分别点击inspecttrace,进入调试窗口。在trace窗口中点击record按钮

一种基于chrome trace的白屏问题排查方法

选择 Frame Viewer项,点击右下角Record按钮,开始记录。

一种基于chrome trace的白屏问题排查方法

第三步,回到inspect窗口,按照卡顿现象出现的路径,重新操作一遍页面,还原闪屏现场。

第四步,上述操作完成后回到trace窗口,点击Stop, chrome会自动将我们的操作每一帧的信息,以及变化的信息呈现出来,如下图所示:

一种基于chrome trace的白屏问题排查方法

第五步,分别点击每一帧,在下方的窗口处,找到白屏所在的一帧。

一种基于chrome trace的白屏问题排查方法

从图中可知,trace中会清晰显示各个线程执行的时间线。分别点击白屏左右的v8.run,发现如下图所示:

一种基于chrome trace的白屏问题排查方法一种基于chrome trace的白屏问题排查方法

在白屏前,V8执行了html的解析, 白屏后开始执行record.chunk.js

回到inspect中,分析record.chunk.js的内容。发现record.chunk.js正是负责react code的渲染,如下图所示:

一种基于chrome trace的白屏问题排查方法

至此,可以推断出在白屏出现在react code代码渲染之前。此时页面的渲染由当前的jscss,html决定。分析inspect network的加载顺序,如下图所示:

一种基于chrome trace的白屏问题排查方法

发现在record.cssrecord.chunk.js前已经加载完成。这意味着在record.chunk.js加载执行前,可以在record.css处理中间过渡的白屏页面的效果。

解决问题

由以上分析可知,我们只需要在record.css处理过渡时间的页面效果,即可修复白屏问题。代码如下:

`// record.css
html, body {
    background-color: rgb(32,0,77);
}
`

修复后的效果如下图所示: 一种基于chrome trace的白屏问题排查方法

相关链接

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
3年前
MacOS VSCode 安装 GO 插件失败问题解决
0x00问题重现Installinggolang.org/x/tools/cmd/guruFAILEDInstallinggolang.org/x/tools/cmd/gorenameFAILEDInstallinggolang.org/x/lint/golintFAILEDInst
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这