记录一次网页崩溃的问题

282 阅读1分钟

本来正在爽快的摸鱼ing

突然被拉进去一个内部问题反馈群,运营人员表示在一个自定义表单中,有一个表格组件,添加到第6 7 项的时候页面变得很慢,紧接着就出现了页面崩溃

第一时间脑海里闪过的是难道有死循环?

询问了详细的复现流程后,启动代码本地运行了发现没有死循环问题,这下子卡壳了

呆住几分钟后,赶紧开始搜索

https://juejin.cn/post/6939741175645470727

https://zhuanlan.zhihu.com/p/322356761

根据文章先使用了performance发现JS Heap确实添加到第N项的时候,内存明显增加

Pasted Graphic 4.png

接着使用memory工具进行分析 先记录一个堆内存快照,查看当前的内存情况

截屏2023-02-27 15.22.01.png

然后按照运营人员所说的步骤执行,再记录一个堆内存快照,进行比较

Pasted Graphic 2.png

Emmm~~~,发现string这一栏所占内存实在是大,打开一看,咦~这眼熟的数据

Pasted Graphic 3.png

一点点排查找到对应的对象

最终发现是class组件直接为this赋值变量导致变量未被垃圾回收,造成内存不足,网页崩溃

在组件中添加了加以解决

 componentWillUnmount() {

    this.变量名= null;

  }

解决问题就一行代码,但是debug过程却很久,也学习到一个新技能