第一步
使用 dcloudio/uni-preset-vue 模板创建一个应用,然后创建一个组件,在父组件中定义一个列表属性 list ,通过 v-for 渲染该自定义组件,在项目刚打开的时候进行一次内存快照
第二步
通过直接赋值或者 splice 的形式改变数组的长度,然后再进行一次内存快照,分析内存快照中的 VueComponent Constructor 数量
产品分类: uniapp/小程序/微信
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 14.5
第三方开发者工具版本号: 微信开发者工具 Stable 1.06.2405020
基础库版本号: 3.5.0
项目创建方式: CLI
CLI版本号: @vue/cli 5.0.8
使用 dcloudio/uni-preset-vue 模板创建一个应用,然后创建一个组件,在父组件中定义一个列表属性 list ,通过 v-for 渲染该自定义组件,在项目刚打开的时候进行一次内存快照
通过直接赋值或者 splice 的形式改变数组的长度,然后再进行一次内存快照,分析内存快照中的 VueComponent Constructor 数量
VueComponent Constructor 的数量不应该随着 list 的操作不断增长,应该与当前 list 的长度相关保持一个恒定值。
VueComponent Constructor 的数量不应该随着 list 的操作不断增长 ,观察 VueComponent 的 $options 的信息发现都是 test 组件在泄漏。
使用 v-for 渲染自定义组件以后,如果直接修改渲染数组的内容,会引起组件无法释放一直存留在内存中。代码参考附件memory-test
使用微信原生小程序做类似的逻辑没有引起内存泄漏。代码参考附件memory_test_2
附件的截图为微信原生小程序的内存分析截图和 uniapp 的截图