本来正在爽快的摸鱼ing
突然被拉进去一个内部问题反馈群,运营人员表示在一个自定义表单中,有一个表格组件,添加到第6 7 项的时候页面变得很慢,紧接着就出现了页面崩溃
第一时间脑海里闪过的是难道有死循环?
询问了详细的复现流程后,启动代码本地运行了发现没有死循环问题,这下子卡壳了
呆住几分钟后,赶紧开始搜索
https://juejin.cn/post/6939741175645470727
https://zhuanlan.zhihu.com/p/322356761
根据文章先使用了performance发现JS Heap确实添加到第N项的时候,内存明显增加
接着使用memory工具进行分析 先记录一个堆内存快照,查看当前的内存情况
然后按照运营人员所说的步骤执行,再记录一个堆内存快照,进行比较
Emmm~~~,发现string这一栏所占内存实在是大,打开一看,咦~这眼熟的数据
一点点排查找到对应的对象
最终发现是class组件直接为this赋值变量导致变量未被垃圾回收,造成内存不足,网页崩溃
在组件中添加了加以解决
componentWillUnmount() {
this.变量名= null;
}
解决问题就一行代码,但是debug过程却很久,也学习到一个新技能