Подтвердить что ты не робот

Утечка памяти KnockoutJS

Я уверен, что у меня есть утечки памяти с использованием KO версии 2.0. У меня есть наблюдаемый массив, который заполняется результатом вызова AJAX. Эта коллекция привязана к данным с помощью a для каждого в контейнер DIV. Каждый объект в массиве имеет одно единственное наблюдаемое значение, привязанное к флажку. Я изучил кучу с помощью Chrome, и мой вывод следующий:

Если вызов AJAX возвращает 3 элемента, они отображаются правильно в DOM. Если в этот момент я сделаю снимок кучи, есть три объекта SearchResult. Если я снова вызову вызов AJAX и он вернет 5 элементов, все 5 будут правильно отображены в DOM. Однако, если я сделаю снимок кучи в Chrome и сравню их, в куче все еще есть восемь элементов, все они перечислены как "добавленные", и ни один из них не указан как "удаленный". Дисплей DOM всегда правильный, но использование памяти просто продолжает расти и подниматься, потому что старые результаты поиска никогда не освобождаются.

Может ли кто-нибудь помочь мне или дать мне указатели на диагностику утечки памяти?

UPDATE

Я создал jsFiddle, чтобы показать суть того, что я делаю. Я разбил ВСЕ все, но основные функции, и я все еще могу дублировать утечку памяти при работе на моей локальной машине. Очевидно, что код не будет работать, поскольку он опубликован, потому что ему нужно попасть на мой локальный сервер для запуска поиска.

ОБНОВЛЕНИЕ 2

Я вытащил самую новую версию версии 2.1.0.0 Beta, и утечка исчезла. Я не большой поклонник использования бета-версии вещей или классического исправления "просто обновить до новой версии". Мне все еще очень интересно узнать, что изменилось или что я делаю неправильно, что создавало утечку.

4b9b3361

Ответ 1

Вы не делаете ничего плохого, похоже, что ko.cleanNode игнорировал привязки foreach и неправильно удалял устаревшие объекты в обновленном observableArray.

https://github.com/SteveSanderson/knockout/issues/271

Это было исправлено в 2.1.0beta​​p >