Vue: 「トランジション」と「キープアライブ」を使用するとメモリリークが発生する

作成日 2019年04月07日  ·  5コメント  ·  ソース: vuejs/vue

バージョン

2.6.10

複製リンク

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

再現する手順

私はデモを書きました:

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

デバッグプロセスは次のとおりです。
1「ガベージを収集」と「ヒープスナップショットを作成」をクリックします(スナップショット1)
2左側のルーティングボタンを10回クリックし、[ガベージを収集]と[ヒープスナップショットを作成]をクリックします(スナップショット2)
3左側のルーティングボタンを10回クリックし、[ガベージを収集]と[ヒープスナップショットを作成]をクリックします(スナップショット3)

生成される「スナップショット」は次のとおりです。

スナップショット1:

スナップショット2:

スナップショット3:

100回クリックした後:

VueComponentはリサイクルされていませんが、これはバグですか?

何が期待されますか?

なぜこれが起こっているのですか、これはバグですか?

実際に何が起こっているのですか?

コンポーネントを切り替えるときに、コンポーネントはクリアされません。

bug has PR

最も参考になるコメント

この問題に関する最新情報をぜひご覧ください。PRはありますが、死んでいるようです。

全てのコメント5件

これを見てみます。

親を削除した場合、すべてのコンポーネントはキャッシュされたvnodeの親によって保持されます。 その後、コンポーネントはリサイクルされます。

メモリリークの問題もあります。httpsください。

jsfiddleを作成しようとしましたが、キャッシュ動作を複製する方法がわかりません。

ねえ、何かニュースはありますか? この更新はすでにマスターブランチにマージされていますか? 私は同じ問題を抱えています。

この問題に関する最新情報をぜひご覧ください。PRはありますが、死んでいるようです。

このページは役に立ちましたか?
0 / 5 - 0 評価