liven001 发表于 2020-3-2 17:35

VUE computed 导致内存溢出,寻找高手帮忙解决

本帖最后由 liven001 于 2020-3-2 18:50 编辑


```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="https://unpkg.com/@vue/composition-api/dist/vue-composition-api.umd.js"></script>
</head>
<body>
<h1>全局 "reactive"对象在组件"computed"函数中用到后,不会跟随组件销毁而释放内存,从而导致内存溢出</h1>
<div id="app"></div>
<script>
    Vue.use(vueCompositionApi.default);

    // 1, 创建一个全局共享reactive对象
    const store = vueCompositionApi.reactive({
      list: new Array(100000).fill('').map((_, index) => {
            return {
                index
            }
      })
    })

    // 2,在"Item"组件中的"computed"函数里面使用到全局共享reactive对象
    const Example = {
      template: `<div>{{ls.length}}</div>`,
      setup() {
            return {
                ls: vueCompositionApi.computed(() => store.list)
            }
      }
    }

    // 3, 在"App"组件上通过"toggle"按钮不停的创建销毁"Item"组件
    // 然后你会发现你的内存不停的增长,新增的内存并不会随"Item"组件的销毁而销毁
    const App = {
      components: {Example},
      template: `
            <div>
                <button @click="show = !show">toggle</button>
                <example v-if="show"></example>
            </div>`,
      setup() {
            return {
                show: vueCompositionApi.ref(false)
            }
      }
    }


    new Vue({
      el: '#app',
      render: h => h(App)
    })
</script>
</body>
</html>
```

linguo2625469 发表于 2020-3-2 17:57

编辑一下格式吧,用代码块把代码包一下

此用户无法显示 发表于 2020-3-2 17:58

可以用md语法或者直接插入代码哦

liven001 发表于 2020-3-2 18:51

linguo2625469 发表于 2020-3-2 17:57
编辑一下格式吧,用代码块把代码包一下

已经编辑了格式,帮忙看看

liven001 发表于 2020-3-2 18:52

此用户无法显示 发表于 2020-3-2 17:58
可以用md语法或者直接插入代码哦

已经编辑了格式,帮忙看看

乱码 发表于 2020-3-2 20:16

没有内存溢出,store 就是个全局变量,你先不要考虑响应式,只考虑创建了一个全局变量,你在哪读取,都可以,如果不释放,全局依然存在。
页: [1]
查看完整版本: VUE computed 导致内存溢出,寻找高手帮忙解决