借用JSON.stringify方法快速排查变量内部循环引用引起的内存泄漏问题

102 阅读1分钟

vue工程内存泄漏报错:Maximum call stack size exceeded RangeError: Maximum call stack size exceeded at Observer.walk (eval at ../../node_modules/vue/dist/vue.runtime.esm.js ...

通篇看完代码,没有找到循环引用的问题代码。 随后一步一步打断点排查,最后排查到变量赋值的一行代码drawAreaState.currentEdit = regionInfo执行后立马报错。 变量赋值为啥会引起循环引用而导致崩溃呢,有点迷惑,这里借用JSON.stringify方法能快速查清原因。

console.log(JSON.stringify(regionInfo));

使用JSON.stringify转对象,从而可以直观看出报错信息,显示这个对象内部LatLng属性的构造方法引起了循环引用 报错: Converting circular structure to JSON --> starting at object with constructor 'LatLng' | property '__vertex' -> object with constructor 'NewClass' --- property 'latlng' closes the circle TypeError: Converting circular structure to JSON --> starting at object with constructor 'LatLng' | property '__vertex' -> object with constructor 'NewClass' --- property 'latlng' closes the circle...

再看对象regionInfo:

002.jpg

确定是属性latlngs引起的,遍历latlngs,去掉额外的只留下关键信息lat和lng即可。