Vue: تسرب الذاكرة عند استخدام "الانتقال" و "البقاء على قيد الحياة"

تم إنشاؤها على ٧ أبريل ٢٠١٩  ·  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

التعليق الأكثر فائدة

أرغب حقًا في رؤية أي تحديث حول هذه المشكلة - هناك علاقات عامة ولكن يبدو أنها ميتة؟

ال 5 كومينتر

سوف ألقي نظرة على هذا.

يتم الاحتفاظ بجميع المكونات من قبل والد vnode المخزن مؤقتًا , إذا حذفنا الأصل. ثم يتم إعادة تدوير المكونات

لدي أيضًا مشكلة تسرب الذاكرة ، يرجى الاطلاع على: https://github.com/bootstrap-vue/bootstrap-vue/issues/4214

حاولت إنشاء jsfiddle ولكني لست متأكدًا من كيفية تكرار سلوك التخزين المؤقت.

مرحبًا ، هل هناك أي أخبار؟ هل تم دمج هذه التحديثات بالفعل في الفرع الرئيسي؟ لدي نفس المشكلة.

أرغب حقًا في رؤية أي تحديث حول هذه المشكلة - هناك علاقات عامة ولكن يبدو أنها ميتة؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

aviggngyv picture aviggngyv  ·  3تعليقات

robertleeplummerjr picture robertleeplummerjr  ·  3تعليقات

paceband picture paceband  ·  3تعليقات

franciscolourenco picture franciscolourenco  ·  3تعليقات

Jokcy picture Jokcy  ·  3تعليقات