Vazamento de memória Javascript com Vue JS e Velocity JS
-
20-12-2019 - |
Pergunta
Tenho trabalhado com Velocity.js e Vue.js e tive um vazamento de memória.Violino do problema:Você pode ver um exemplo neste violino: 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);
});
Usei a função de linha do tempo do Chrome e percebi que o número de nós DOM nunca diminui, mesmo quando forço uma coleta de lixo.Comecei a mergulhar no heap profiler, mas está um pouco além da minha cabeça.
Quando eu nós .animate()
em vez de .velocity()
, os nós DOM parecem ter obtido o GCed corretamente.
$(nextVue.$el).animate({
'left': '0'
}, 0, callback);
Parece também que a remoção do Vue também resolve o problema.Exemplo: http://jsfiddle.net/yV6Zr/1/.
O que poderia estar causando esse vazamento de memória?
Solução
Resolvido na página do GitHub do speed.js:
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow