Javascript KO-JS内存泄漏,可观察到大量单页应用程序

Javascript KO-JS内存泄漏,可观察到大量单页应用程序,javascript,arrays,knockout.js,memory-leaks,Javascript,Arrays,Knockout.js,Memory Leaks,我注意到,在使用ko组件的单页应用程序上使用ko js observables(或者可能我做错了什么)时,似乎存在内存泄漏 基本上,我从对restapi的ajax调用(约2000个项的数组)中获取大量数据。本地存储这些数据,并将其转换为可观察数据以进行操作/查看。当用户导航到另一页时,内存量保持不变。然后,当导航回该页时,数据被重新加载并存储在内存中。重复这个过程,最终浏览器会崩溃。看着chrome上的任务管理器,我可以看到内存在不断升级。这里有一个简单的版本,我看到了相同的结果 functio

我注意到,在使用ko组件的单页应用程序上使用ko js observables(或者可能我做错了什么)时,似乎存在内存泄漏

基本上,我从对restapi的ajax调用(约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.
}
我不确定我能在该函数中调用什么(如果有的话)来“清除”内存。如果需要任何其他信息来帮助我完成lmk。几天来,我一直在思考这个问题:(


有没有关于修复此问题的想法?我是否在这里做了不正确的事情?

当您说“用户导航到另一个页面”,你的意思是在单页应用程序的上下文中?还是你正在将内容保存到
localStorage
?我的意思是当他们导航到我的应用程序上的另一个“页面”时。单击任何链接。当他们导航到我的应用程序之外的另一个页面(例如google.com)时,所有内容都会按预期清除。你如何使用你的虚拟机(它只是组件的视图模型还是您手动创建了它的新实例)?您的组件是否曾被销毁(调用了方法VM.prototype.dispose)?您是否尝试使用它进行分析?您在dataObj中使用了ko.computed()还是observable.subscribe()?
VM.prototype.dispose = function() {};