Я заметил, что, кажется, возникает утечка памяти при использовании 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.Я уже несколько дней бьюсь об этом: (
Есть мысли по поводу исправления? Я что-то здесь не так делаю?