KO-JS内存泄漏,有很多可观察的单页应用程序

时间:2018-06-04 16:11:35

标签: javascript arrays knockout.js memory-leaks

我注意到在使用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。我现在已经好好打了好几天了:(

有关解决这个问题的任何想法?我在这里做错了吗?

0 个答案:

没有答案