Javascript KO-JS内存泄漏,可观察到大量单页应用程序
我注意到,在使用ko组件的单页应用程序上使用ko js observables(或者可能我做错了什么)时,似乎存在内存泄漏 基本上,我从对restapi的ajax调用(约2000个项的数组)中获取大量数据。本地存储这些数据,并将其转换为可观察数据以进行操作/查看。当用户导航到另一页时,内存量保持不变。然后,当导航回该页时,数据被重新加载并存储在内存中。重复这个过程,最终浏览器会崩溃。看着chrome上的任务管理器,我可以看到内存在不断升级。这里有一个简单的版本,我看到了相同的结果Javascript KO-JS内存泄漏,可观察到大量单页应用程序,javascript,arrays,knockout.js,memory-leaks,Javascript,Arrays,Knockout.js,Memory Leaks,我注意到,在使用ko组件的单页应用程序上使用ko js observables(或者可能我做错了什么)时,似乎存在内存泄漏 基本上,我从对restapi的ajax调用(约2000个项的数组)中获取大量数据。本地存储这些数据,并将其转换为可观察数据以进行操作/查看。当用户导航到另一页时,内存量保持不变。然后,当导航回该页时,数据被重新加载并存储在内存中。重复这个过程,最终浏览器会崩溃。看着chrome上的任务管理器,我可以看到内存在不断升级。这里有一个简单的版本,我看到了相同的结果 functio
function VM(params) {
this.data = ko.observableArray();
//populate the data so it looks similar to what is given by the server
var arr = []
//i made it 10k since these are simple objects and I want to memory being used to be somewhat substantial to mimic the real data.
for (i = 0; i < 10000; i++) {
arr.push({
val1: i,
val2: i,
val3: i,
val4: i,
val5: i,
val6: i,
val7: i,
val8: i,
val9: i,
val10: i
});
}
self.data(arr.map(function (x) {
return new dataObj(x);
}))
}
var dataObj = function (data) {
//using ko.mapping.fromJS or separating them out has the same results:
//option 1:
ko.mapping.fromJS(data, {}, this);
//option 2:
this.val1 = ko.observable(data.val1)
this.val2 = ko.observable(data.val2)
//etc.
}
我不确定我能在该函数中调用什么(如果有的话)来“清除”内存。如果需要任何其他信息来帮助我完成lmk。几天来,我一直在思考这个问题:(
有没有关于修复此问题的想法?我是否在这里做了不正确的事情?当您说“用户导航到另一个页面”,你的意思是在单页应用程序的上下文中?还是你正在将内容保存到
localStorage
?我的意思是当他们导航到我的应用程序上的另一个“页面”时。单击任何链接。当他们导航到我的应用程序之外的另一个页面(例如google.com)时,所有内容都会按预期清除。你如何使用你的虚拟机(它只是组件的视图模型还是您手动创建了它的新实例)?您的组件是否曾被销毁(调用了方法VM.prototype.dispose)?您是否尝试使用它进行分析?您在dataObj中使用了ko.computed()还是observable.subscribe()?
VM.prototype.dispose = function() {};