سؤال

لقد كنت أعمل مع Velocity.js وVue.js وواجهت تسربًا للذاكرة.فداحة المسألة:يمكنك رؤية مثال في هذا الكمان: http://jsfiddle.net/hRAN7/3/

$(function () {

    var ExtVue = Vue.extend({
        'template': '#template',
        'replace': true
    });

    var currVue;

    setInterval(function () {
        var nextVue = new ExtVue();
        nextVue.$appendTo($('body').get(0));

        $(nextVue.$el).velocity({
            'left': '0'
        }, 0, callback);

        function callback() {
            if (currVue)
                currVue.$destroy();
            currVue = nextVue;
        }

    }, 10);
});

لقد استخدمت وظيفة المخطط الزمني في Chrome ولاحظت أن عدد عقد DOM لا يتناقص أبدًا، حتى عندما أقوم بفرض تجميع البيانات المهملة.لقد بدأت في الغوص في ملف تعريف الكومة ولكنه فوق رأسي قليلاً.

عندما أنا .animate() بدلاً من .velocity(), ، يبدو أن عقد DOM تحصل على GCed بشكل صحيح.

$(nextVue.$el).animate({
    'left': '0'
}, 0, callback);

ويبدو أيضًا أن إزالة Vue تعمل أيضًا على حل المشكلة.مثال: http://jsfiddle.net/yV6Zr/1/.

ما الذي يمكن أن يسبب تسرب الذاكرة هذا؟

هل كانت مفيدة؟

المحلول

تم الحل على صفحة velocity.js GitHub:

https://github.com/julianshapiro/velocity/issues/300

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top