Фреймы IE6 и утечка памяти

Прежде чем задать этот вопрос, я понимаю, что все его аспекты неверны. Пожалуйста, имейте это в виду...

У меня есть CRM-приложение для внутренней сети со встроенным программным телефоном, разработанное в 2001 году, которое я унаследовал. По сути, это приложение для коллекций, которое объединяет элементы управления телефонией с веб-интерфейсом для управления учетными записями. (телефония Genesys и система сбора данных на основе AS400... с использованием MQSeries)

Я пытаюсь максимально модернизировать это приложение, прежде чем называть его "концом жизни". В рамках моих попыток модернизировать его я реализовал jQuery и пользовательский интерфейс jQuery для своих функций JS и пользовательского интерфейса. Я не схожу с ума от этого, но это довольно хорошо укоренилось.

Теперь о проблеме: в настоящее время мы используем IE6, а приложение построено с использованием фреймов. Реализация библиотек jQuery выявила решетоподобную природу приложения с точки зрения памяти.В настоящее время он потребляет около 75 МБ памяти при запуске и увеличивается до 150–300 МБ примерно через 2-3 часа. Затем браузер вылетает.

Я сузил количество утечек памяти до перекрестных помех между кадрами. Я проверил страницы по отдельности в sIEve и Drip, и утечек не обнаружено. Но получить доступ к страницам внутри набора фреймов — это бомба замедленного действия.

Я знаю, что ответ — переделать приложение без фреймов и начать использовать лучший браузер. С этим есть две проблемы:

  1. Я протестировал это на IE9, и проблемы все еще есть, но немного более контролируемый

  2. Редизайн приложения займет около 500 тысяч долларов и 6-12 месяцев.

Кто-нибудь знает, как решить проблему "утечки кадров"? Я знаю, что не привел примеров кода, но я просто ищу общие знания. Я вызываю метод IE CollectGarbage()при загрузке и выгрузке для каждой страницы в приложении, но безрезультатно. Я пробовал вызывать метод 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. И это очищает память для страницы. Но когда перезагружается отдельный кадр, память никогда не очищается... по-видимому. И каждый экран, который должны видеть мои пользователи, перезагружается в основной кадр.

Я не могу просто обновить набор фреймов, потому что в наборе фреймов есть программный телефон, который вызовет Армагеддон, если он будет обновлен или выйдет из системы неправильно.

Кто-нибудь знает способ управления памятью набора фреймов без ее обновления?

22
задан Doug Weaver 26 April 2012 в 19:32
поделиться