KO-JS Утечка памяти с большим количеством наблюдаемых одностраничных приложений - PullRequest
0 голосов
/ 04 июня 2018

Я заметил, что, кажется, возникает утечка памяти при использовании ko js observables (или, возможно, я делаю что-то не так) в одностраничном приложении с использованием компонентов ko.

В основном я получаю много данныхот вызова 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() {};

Я не уверен, что (если есть) я могу вызвать эту функцию, чтобы «очистить» память.Если какая-либо дополнительная информация требуется, чтобы помочь мне lmk.Я уже несколько дней бьюсь об этом: (

Есть мысли по поводу исправления? Я что-то здесь не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...