IE и накопление памяти в Javascript - PullRequest
7 голосов
/ 06 февраля 2009

Вот тестовый URL

http://edventures.com/temp/divtest.php

Процедура:

  1. Закройте все экземпляры IE.
  2. Открыть URL в IE7
  3. Откройте диспетчер задач, посмотрите, сколько памяти занимает IE
  4. Теперь нажмите кнопку Создать,
  5. Посмотрите, как память подскочит примерно на 2K
  6. Теперь нажмите кнопку «Уничтожить», и DIV будет уничтожен, но память останется прежней.
  7. Вы можете попробовать это несколько раз, и память просто увеличивается.

Есть ли способ это исправить? Можно ли принудительно вызвать сборщик мусора без перезагрузки окна?

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

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

Спасибо за вашу помощь.

Suhas

Ответы [ 3 ]

10 голосов
/ 06 февраля 2009

Вот как создать элементы DOM и предотвратить утечки памяти в IE.

function createDOMElement(el) {
  var el = document.createElement(el);

  try {
    return el;
  }
  finally {
    el = null;
  }
}

Вы можете использовать варианты трюка try / finally, чтобы предотвратить утечки при выполнении других операций DOM.

0 голосов
/ 06 февраля 2009

Вы пробовали этот эксперимент в других браузерах? Потребление памяти в Firefox намного хуже, чем в IE на моей машине ...

0 голосов
/ 06 февраля 2009

Да - у IE есть ужасные утечки памяти.

Проверьте IE Drip - вам, в основном, нужно создавать страницы так, чтобы они не делали то, что делает IE утечкой таким образом.

Это одна из причин, почему IE так ненавидит.

Чтобы избежать утечки IE, вы должны быть очень осторожны с тем, как добавлять элементы HTML на страницу, особенно таблицы. Будьте особенно осторожны с атрибутами, отличными от HTML 3.2 - IE7 по-прежнему в основном IE4, а атрибуты, внешние по отношению к старым спецификациям HTML, - это то, где он имеет тенденцию работать неправильно.

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