Fuite de mémoire Javascript avec Vue JS et Velocity JS
-
20-12-2019 - |
Question
J'ai travaillé avec Velocity.js et Vue.js et j'ai rencontré une fuite de mémoire.Violon du problème :Vous pouvez voir un exemple dans ce violon : 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);
});
J'ai utilisé la fonction de chronologie de Chrome et j'ai remarqué que le nombre de nœuds DOM ne diminue jamais, même lorsque je force un garbage collection.J'ai commencé à plonger dans le profileur de tas mais c'est un peu au-dessus de ma tête.
Quand je nous .animate()
au lieu de .velocity()
, les nœuds DOM semblent être correctement GCés.
$(nextVue.$el).animate({
'left': '0'
}, 0, callback);
Il semble également que la suppression de Vue résout également le problème.Exemple: http://jsfiddle.net/yV6Zr/1/.
Quelle pourrait être la cause de cette fuite de mémoire ?
La solution
Résolu sur la page GitHub de Velocity.js :