Vue: Pérdida de memoria al usar "transición" y "mantener vivo"

Creado en 7 abr. 2019  ·  5Comentarios  ·  Fuente: vuejs/vue

Versión

2.6.10

Enlace de reproducción

https://codepen.io/aaronbird/pen/JVRKwa

pasos para reproducir

Escribí una demostración:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>demo</title>
    <style>
      .link {
        cursor: pointer;
        user-select: none;
      }
    </style>
  </head>
  <body>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>

    <div id="app">
      <transition>
        <keep-alive include="foo">
          <component :is="target" @change="onChange"></component>
        </keep-alive>
      </transition>
    </div>
    <script>
      const Foo = {
        name: "foo",
        template: `<div class="link" @click="$emit('change', 'bar')">Go to Bar</div>`
      };
      const Bar = {
        name: "bar",
        template: `<div class="link" @click="$emit('change', 'foo')">Go to Foo</div>`
      };
      Vue.component("foo", Foo);
      Vue.component("bar", Bar);
      const app = new Vue({
        data: {
          target: "foo"
        },
        methods: {
          onChange(target) {
            this.target = target;
          }
        }
      }).$mount("#app");
    </script>
  </body>
</html>

El proceso de depuración es el siguiente:
1 Haga clic en "Recoger basura" y "Tomar instantánea de montón" (instantánea 1)
2 Haga clic en el botón de enrutamiento a la izquierda 10 veces, luego haga clic en "Recoger basura" y "Tomar instantánea del montón" (instantánea 2)
3 Haga clic en el botón de enrutamiento a la izquierda 10 veces, luego haga clic en "Recoger basura" y "Tomar instantánea del montón" (instantánea 3)

La "instantánea" generada es la siguiente:

instantánea 1:

instantánea 2:

instantánea 3:

Después de hacer clic 100 veces:

VueComponent no se está reciclando, ¿es esto un error?

¿Lo que es esperado?

¿Por qué sucede esto? ¿Es un error?

¿Qué está pasando realmente?

El componente no se borrará al cambiar de componente.

bug has PR

Comentario más útil

Realmente me encantaría ver alguna actualización sobre este tema: ¿hay relaciones públicas pero parece muerto?

Todos 5 comentarios

Echaré un vistazo a esto.

Todos los componentes son retenidos por el padre de vnode en caché, si eliminamos el padre. luego los componentes se reciclan.

También tengo un problema de pérdida de memoria, consulte: https://github.com/bootstrap-vue/bootstrap-vue/issues/4214

Traté de hacer un jsfiddle pero no estoy seguro de cómo replicar el comportamiento de almacenamiento en caché.

Oye, ¿hay alguna noticia? ¿Estas actualizaciones ya están fusionadas con la rama maestra? Tengo el mismo problema.

Realmente me encantaría ver alguna actualización sobre este tema: ¿hay relaciones públicas pero parece muerto?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

loki0609 picture loki0609  ·  3Comentarios

bdedardel picture bdedardel  ·  3Comentarios

aviggngyv picture aviggngyv  ·  3Comentarios

paceband picture paceband  ·  3Comentarios

seemsindie picture seemsindie  ·  3Comentarios