问题发生在前不久。刚开发完的功能被测试人员发现了问题。如下图所示,在两个页面跳转过程中,会出现闪一下白屏的情况。于是我开始排查这个问题。
搭建排查环境与定位问题
由于前后两个页面都是移动端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,即可看到打开的网页,如下图所示。此处因为涉及公司信息,做了打码处理。
分别点击inspect和trace,进入trace调试窗口。在窗口中点击record按钮
第三步,回到inspect窗口,按照卡顿现象出现的路径,重新操作一遍页面,还原闪屏现场。
第四步,上述操作完成后回到trace窗口,点击Stop, chrome会自动将我们的操作每一帧的信息,以及变化的信息呈现出来,如下图所示:
第五步,分别点击每一帧,在下方的窗口处,找到白屏所在的一帧。
从trace图中可知,中会清晰显示各个线程执行的时间线。分别点击白屏左右的v8.run,发现如下图所示:
在白屏前,V8执行了html的解析, 白屏后开始执行record.chunk.js。
回到inspect中,分析record.chunk.js的内容。发现record.chunk.js正是负责react code的渲染,如下图所示:
至此,可以推断出在白屏出现在react code代码渲染之前。此时页面的渲染由当前的js和css,html决定。分析inspect network的加载顺序,如下图所示:
发现在record.chunk.js前record.css已经加载完成。这意味着record.chunk.js在加载执行前,可以在record.css处理中间过渡的白屏页面的效果。
解决问题
由以上分析可知,我们只需要在record.css处理过渡时间的页面效果,即可修复白屏问题。代码如下:
// record.css
html, body {
background-color: rgb(32,0,77);
}
修复后的效果如下图所示:
相关链接
- Chrome Trace Docs: https://www.chromium.org/developers/how-tos/trace-event-profiling-tool
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.