碰到了相同的情况,在 prop 传递数据量较大的对象时,泄露情况更加明显,希望小程序官方能尽早帮忙看一看~谢谢
自定义组件没有被销毁,导致存在内存泄露的情况?Demo 地址 问题描述 自定义组件实例没有被销毁,如果给组件的 properties 传递了大量数据(Demo 中是 500k),将快速占用内存。 复现步骤 1.打开 Demo,然后打开开发者工具的 Memory 面板,录取内存快照,关注构造函数:l。 [图片] 2.点击 Click 按钮 10 次(相当于渲染、隐藏自定义组件 foo 5 次),然后点击强制垃圾回收按钮,接着再次录取内存快照。 3.选中快照 Snapshot2,filter 设置为:Objects allocated between Snapshot1 and Snapshot2,并筛选构造函数:l。这时可以观察到内存占用大幅上升,其中新增的 5 个对象 l 引用了 32% 的内存。 [图片] 4.展开其中一个 l 对象,可以观察到其 __methodCaller 属性引用的是一个自定义组件实例,从而判断 l 对象跟自定义组件有关。再观察 l 对象中内存占比较大的字段分别是 __vtObj 与 __innerData,它们都分别引用着父组件传入的 json 属性(500k 大数据)。( l 对象的 Retainers 是一些循环引用或内部代码,很难再往下追查) [图片] 5.右键点击 l 对象,选择 Store as a global variable,把 l 对象放到控制台进行观察,发现 __vtObj 与 __innerData 属性引用的是独立的 json 对象。 [图片] 6.综上,推测自定义组件实例没有被销毁,如果给自定义组件的 properties 传递了大型数据,会导致内存泄露问题更明显。 环境信息 基础库:2.32.2复现环境:微信开发者工具(真机调试不支持堆栈 snapshot)
2023-06-26