我一直在使用 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 节点似乎正确地得到了 GC。

$(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