Проблемы с загрузкой KnockoutJS IE8 и утечки памяти

Мы строим сложное корпоративное приложение с использованием KnockoutJS и сталкиваемся с низкой производительностью, особенно в IE8. Приложение может занимать более 1 ГБ оперативной памяти и никогда не освобождает память. Во время исследования мы обнаружили, что KnockoutJS сохраняет ссылки на узлы DOM и никогда не удаляет его. Это можно воспроизвести с помощью IESieve против любого публичного примера KnockoutJS, просто просмотрите использование DOM во время игры с примером, который добавляет и удаляет узлы DOM.

Кто-нибудь столкнулся с этой проблемой и имеет какие-либо идеи о том, как это сделать?

Ответы

Ответ 1

Мы столкнулись с аналогичными проблемами с нокаутом JS на IE 8. Одна из проблемных областей заключалась в наличии наблюдаемого массива (с 500 + элементами) и построении пользовательского интерфейса (представить себе такую ​​таблицу, как или структуру списка) со всеми этими. Единственная работа, которая работала для нас, заключалась в том, чтобы изменить модель представления, чтобы она содержала только очень мало элементов, которые могли бы поместиться на экране. Кроме того, нам пришлось добавлять обработчики для событий прокрутки, чтобы наблюдаемый массив продолжал обновляться. И (не слишком гордившись этим), мы должны были добавить пустой div в верхней части отображаемых записей, чтобы создать иллюзию прокрученного представления.

Ответ 2

Вероятно, чтобы привязки событий не освобождались при удалении элементов DOM. Если это что-то происходит под капотом с нокаутом, вам придется запланировать и отправить запрос на растяжение.

У меня такое дело случалось и с backbonejs. JavascriptMVC немного лучше для очистки после себя.