背景:
我的应用技术栈是Vue3,Univer是基于react的,所以定位问题花了很久,在此记录一下查问题的方式。
使用Chrome DevTools的Performance进行录制,复现卡死操作后,在Performance Monitr中可以看到CPU Usage持续100%,且页面重计算次数持续飙高。由于页面卡死,Performance页面无法正常生成报告,此时可以使用Ctrl + P
呼出Command面板,禁用Javascript,让CPU资源空出来即可正常生成。
生成后结果如下:
放大卡死部分可以发现,有一段代码进入了死循环:
点击黄条部分,可以看到定位的函数:
定位后发现是由于我添加了一个观察者,用于计算菜单定位位置:
这么做本身没有什么问题,但是由于我观察了所有子节点,导致死循环发生:
解决方案:不再观察所有子节点,以免陷入死循环