l***@gmail.com
l***@gmail.com
  • 发布:2024-07-18 17:45
  • 更新:2024-08-23 10:11
  • 阅读:273

【报Bug】通过 v-for 渲染自定义组件会引起内存泄漏

分类:uni-app

产品分类: 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 组件在泄漏。

bug描述:

使用 v-for 渲染自定义组件以后,如果直接修改渲染数组的内容,会引起组件无法释放一直存留在内存中。代码参考附件memory-test
使用微信原生小程序做类似的逻辑没有引起内存泄漏。代码参考附件memory_test_2
附件的截图为微信原生小程序的内存分析截图和 uniapp 的截图

2024-07-18 17:45 负责人:无 分享
已邀请:
l***@gmail.com

l***@gmail.com (作者) - tencent fe

顶一下,希望官方能够关注到并处理。

飞翔的青蛙

飞翔的青蛙

我这也遇到了类似情况,我是v-for中用template标签v-if判断自定义组件;当渲染过有许多自定义组件的页面后,使用relaunch或者分享微信小程序到聊天窗口打开其他页面,触发this.$vm && this.$vm.$destroy()执行了30多秒销毁组件/页面,安卓真机有的要到2分钟,苹果没复现到

愚者

愚者 - 70

各位领导干部,怎么解决

要回复问题请先登录注册