Vue: Kebocoran memori saat menggunakan "transisi" dan "tetap hidup"

Dibuat pada 7 Apr 2019  ·  5Komentar  ·  Sumber: vuejs/vue

Versi: kapan

2.6.10

Tautan reproduksi

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

Langkah-langkah untuk mereproduksi

Saya menulis demo:

<!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>

Proses debugging adalah sebagai berikut:
1 Klik "Kumpulkan sampah" dan "Ambil cuplikan tumpukan" (cuplikan 1)
2 Klik tombol perutean di sebelah kiri 10 kali, lalu klik "Kumpulkan sampah" dan "Ambil cuplikan tumpukan" (cuplikan 2)
3 Klik tombol perutean di sebelah kiri 10 kali, lalu klik "Kumpulkan sampah" dan "Ambil cuplikan tumpukan" (cuplikan 3)

"Snapshot" yang dihasilkan adalah sebagai berikut:

snapshot 1:

snapshot 2:

snapshot 3:

Setelah mengklik 100 kali:

VueComponent tidak didaur ulang, apakah ini bug?

Apa yang diharapkan?

Mengapa ini terjadi, apakah ini bug?

Apa yang sebenarnya terjadi?

Komponen tidak akan dihapus saat mengganti komponen.

bug has PR

Komentar yang paling membantu

Saya sangat ingin melihat pembaruan apa pun tentang masalah ini - ada PR tetapi tampaknya sudah mati?

Semua 5 komentar

Saya akan melihat ini.

Semua komponen disimpan oleh induk vnode yang di-cache, jika kita menghapus induk. kemudian komponen didaur ulang. Akan menggali lebih banyak

Saya juga mengalami masalah kebocoran memori, silakan lihat: https://github.com/bootstrap-vue/bootstrap-vue/issues/4214

Saya mencoba membuat jsfiddle tetapi tidak yakin bagaimana cara meniru perilaku caching.

Hei, apa ada kabar terbaru? apakah pembaruan ini sudah digabungkan ke cabang master? Saya memiliki masalah yang sama.

Saya sangat ingin melihat pembaruan apa pun tentang masalah ini - ada PR tetapi tampaknya sudah mati?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat