Утечка памяти в IE6 при обновлении? - PullRequest
5 голосов
/ 22 февраля 2010

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

Я делаю это:

setTimeout(function () {
        location.href = location.href; // forces a reload from the server
    }, 1000*10*0.5); 

Я заметил, что использование памяти IE6 продолжает расти и увеличиваться. Страница ничего не делает, кроме обновления и отображения HTML.

Почему это происходит? Как я могу преодолеть эту проблему? Я не хочу завершать работу IE6.

Его на 435 000K, и это было около 30 минут.

Спасибо всем

Обновление

Извините всех - у меня есть другая функция, которая запускается каждый раз при загрузке страницы:

function recreateTicks(tasks){

 if(tasks!=''){

  var myTicks = tasks.split(',');

  var length = myTicks.length;

  for(var i=0; i<length; i++){

   var element = myTicks[i];

   $('#'+element).attr('checked', true);

  }

 }

}

Что-то не так с вышесказанным? Циркулярная справка ??

Обновление 2

Вышеуказанная функция вызывается так:

<script type="text/javascript">
<!--PHP Generated-->
var tasks = 'ab_1, ab_2, ab_3';
</script>
<script type="text/javascript">
$(document).ready(function(){     
recreateTicks(tasks);
});
</script>

Ответы [ 4 ]

7 голосов
/ 22 февраля 2010

Вы уверены, что страница ничего не делает? У вас (например) нет нескольких обработчиков событий, которые вы прикрепили к элементам? IE славится утечкой памяти, если вы явно не разрываете соединение между элементом и его обработчиком во время события unload. (Это не универсально, обработчик должен иметь ссылку на что-то, но это легко сделать - например, с помощью замыкания.) Крокфорд написал некоторую информацию об утечках памяти в IE, быть полезным для вас.

4 голосов
/ 03 марта 2010

Хорошо, это немного противоречиво, но почему бы просто не дать IE6 вылететь?

В итоге вы можете посвятить большую часть своего времени разработке проблем IE6 - в лучшем случае быстро сокращающегося рынка. Хотя это мрачно держится в корпоративном пространстве, оставшиеся пользователи в любом случае ужасно заблокированы большим количеством плохого программного обеспечения. Те пользователи IE6 будут все чаще иметь представление, что их настройки ПК не соответствуют стандартам (и это так).

Почему бы просто не позволить тем пользователям IE6 дать сбой? Они просто увидят, что их ПК становится все медленнее и медленнее, и сообщение об ошибке (когда оно появляется) является IE, а не на странице.

В 100% -ном подходе к качеству, ориентированному на клиента, есть большая ценность, и опасно начинать позволять этим пользователям самим себя так заботиться, но для вас важен баланс между затратами на разработку и вознаграждением.

Если только эти пользователи IE6 (чей браузер все равно аварийно завершает работу) не заметят, что проблема связана с вашим приложением, и у вас есть возможность заблокировать его продажу, то какая польза для вас в удвоении затрат на разработку?

Наконец, если вы действительно хотите, чтобы IE6 был без утечек, не используйте jQuery. Напишите весь свой Javascript с нуля и наблюдайте за своим прицелом и различными ошибками IE6 DOM, как ястреб. jQuery использует расширенные атрибуты (которые всегда имеют утечку в IE6) и скрывает некоторые проблемы с областью действия, которые вам действительно нужны для микроуправления, если вы хотите, чтобы IE6 не пропускал.

2 голосов
/ 25 февраля 2010

У IE6 ужасное время с памятью. IE7 сделал некоторые улучшения, и даже больше в IE8.

Как говорит TJ, циклические ссылки могут вызывать это (элемент страницы ссылается на объект javascript, который ссылается на этот элемент).

Подробнее о том, как уменьшить утечки в IE, можно прочитать, прочитав ЭТУ СТРАНИЦУ . Вам также следует проверить Детектор утечек памяти JavaScript (написанный командой Global Products в Microsoft). Это поможет вам найти утечки, если таковые имеются.

0 голосов
/ 01 марта 2010

Вы уверены, что у вас последняя исправленная версия IE6? Я столкнулся с той же проблемой в корпоративной локальной сети и в конце концов понял, что рабочие столы не исправлены, чтобы сохранить совместимость с устаревшим программным обеспечением. Доведение до последней версии IE6 устранило проблему.

В частности, я считаю, что это патч ...

http://support.microsoft.com/kb/929874/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...