使用knockout.js 2.3.0和jquery mobile 1.3.1的内存泄漏
我们正在使用knockout 2.3.0和jquery mobile 1.3.1。我们使用$.mobile.changePage api从一个屏幕转换到另一个屏幕,并将ko ViewModel绑定到pagebeforeshow中相应的dom元素,并使用pageshow中的removeNode清理上一个屏幕的绑定。以下是相同的代码:使用knockout.js 2.3.0和jquery mobile 1.3.1的内存泄漏,knockout.js,memory-leaks,Knockout.js,Memory Leaks,我们正在使用knockout 2.3.0和jquery mobile 1.3.1。我们使用$.mobile.changePage api从一个屏幕转换到另一个屏幕,并将ko ViewModel绑定到pagebeforeshow中相应的dom元素,并使用pageshow中的removeNode清理上一个屏幕的绑定。以下是相同的代码: $(document).ready(function() { $(document).on('pageshow', function(even
$(document).ready(function() {
$(document).on('pageshow', function(event, ui) {
var prevId = ui.prevPage.attr('id');
console.log('Clean node = ' + prevId);
if (prevId && $('#' + prevId)){
if($('#' + prevId)[0]){
console.log("$('#' + prevId) = " + $('#' + prevId)[0]);
ko.removeNode($('#' + prevId)[0]);
}
}
});
$(document).on('pagebeforeshow', function(event, ui) {
var Screen1VM = function() {
};
var Screen2VM = function() {
};
var path = event.target.id;
if(path == 'Screen1'){
var vmObj = new Screen1VM();
ko.applyBindings(vmObj, document.getElementById('Screen1'));
}else if(path == 'Screen2'){
var vmObj = new Screen2VM();
ko.applyBindings(vmObj, document.getElementById('Screen2'));
}
});
});
在chromedev工具上显式地执行垃圾收集并过滤objets Screen1VM和Screen2VM之后获取堆快照,我们看到这些对象的引用由一个不断增长的knockout对象数组保存。对象计数始终等于我们访问屏幕的次数,并且该次数永远不会下降。请让我知道,如果有什么错误是在这里做的