我注意到在使用ko组件的单页应用程序上使用ko js observables(或者我做错了)时似乎存在内存泄漏。
基本上我从ajax调用到REST API(大约2000个项目的数组)中获取了大量数据。在本地存储这些并转换为可观察的操作/查看。当用户导航到另一个页面时,内存量保持不变。然后,当导航回该页面时,数据被重新加载并存储在存储器中。重复该过程,最终浏览器崩溃。在chrome上观察任务管理器我可以看到这个内存继续升级。这是一个简单的版本,我看到的结果相同。
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.
}
我注意到解构组件时有一个函数:
VM.prototype.dispose = function() {};
我不确定我可以在该功能中调用什么(如果有的话)来清除&#39;记忆。如果需要任何其他信息来帮助我lmk。我现在已经好好打了好几天了:(
有关解决这个问题的任何想法?我在这里做错了吗?