تسرب ذاكرة جافا سكريبت مع Vue JS وVelocity JS
-
20-12-2019 - |
سؤال
لقد كنت أعمل مع 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:
لا تنتمي إلى StackOverflow