Прежде чем я начну этот вопрос, я понимаю, что каждый его аспект неправильный.Пожалуйста, имейте это в виду ...
У меня есть приложение для интрасети CRM со встроенным программным телефоном, разработанным в 2001 году, которое я унаследовал.По сути, это приложение для сбора коллекций, которое объединяет средства управления телефонией с веб-интерфейсом для управления учетными записями.(Телефонная связь Genesys и система коллекций на основе AS400 ... с использованием MQSeries)
Я пытаюсь модернизировать это приложение настолько, насколько это возможно, прежде чем назвать его «концом жизни».В рамках моих попыток его модернизации я реализовал пользовательский интерфейс jQuery & jQuery для своей функциональности и пользовательского интерфейса JS.Я не схожу с ума от этого, но это довольно хорошо укоренилось.
Теперь введите проблему: в настоящее время мы используем IE6, а приложение построено с использованием фреймов.Реализация библиотек jQuery выявила ситоподобную природу приложения с точки зрения памяти.В настоящее время он потребляет около 75 МБ памяти при запуске и увеличивается примерно от 150 до 300 МБ примерно через 2-3 часа.Затем происходит сбой браузера.
Я сузил утечки памяти до перекрестных помех между кадрами.Я тестировал страницы индивидуально в sIEve и Drip, и утечек не обнаружено.Но доступ к страницам в наборе кадров, и это бомба замедленного действия.
Я знаю, что ответ - изменить дизайн приложения без фреймов и начать использовать лучший браузер.Есть две проблемы с этим:
Я проверял это на IE9, и проблемы все еще там, но немного более контролируемые
Редизайн приложения может занять около 500 тыс. Долл. США и 6-12 месяцев.
Кто-нибудь знает способ решения проблемы «утечки кадров»?Я знаю, что не дал никаких примеров кода, но я просто ищу общие знания.Я вызываю метод IE CollectGarbage()
при onload и onunload для каждой страницы в приложении, но безрезультатно.Я пытался вызвать метод empty()
в jQuery.Я пытался установить для каждого дочернего элемента document.body
значение null
.Ничего не работает
Я бы не хотел отказываться от всех этих изменений, потому что на самом деле были реализованы довольно большие функции по сокращению расходов.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Мне удалось точно определить сценарий, в котором происходят утечки памяти.Я думал, что это было «перекрестное взаимодействие» между кадрами, но кажется, что утечки памяти происходят, когда обновляется один кадр.
Я установил базовый набор фреймов с 5 экземплярами одной и той же страницы (в которой, я уверен, нет утечек за сеанс).
<html>
<head>
<title>Frame Leak Test</title>
</head>
<frameset cols="*" rows="50%,50%" frameborder="1">
<frameset cols="33%,33%,34%" rows="100%">
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
</frameset>
<frameset cols="50%,50%" rows="100%">
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
</frameset>
</frameset>
</html>
Загружаемая страница индекса не показывает утечек в sIEve.
Когда я загружаю страницу набора фреймов в sIEve и нажимаю автообновление, об утечках памяти не сообщается.Однако, если я щелкну правой кнопкой мыши -> Обновить на отдельном кадре, 75% загруженных элементов в DOM будут перечислены как утечки.
Очевидно, что автоматическое обновление эквивалентно обновлению F5 / shift + F5.И это очищает память для страницы.Но когда перезагружается отдельный кадр, память никогда не очищается ... очевидно.И каждый экран, который должны видеть мои пользователи, перезагружается в основной кадр.
Я не могу просто обновить набор фреймов, потому что в наборе фреймворков есть программный телефон, который вызовет Армагеддон, если он обновится или выйдет изненадлежащим образом.
Кто-нибудь знает способ управления памятью набора фреймов без ее обновления?