Вопросы по утечке памяти JS (try / catch, образы в b64, ajax, unset variable, removeChild) - PullRequest
1 голос
/ 06 апреля 2011

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

1 - Использование try / catch может увеличить использование памяти?Пример:

try{
  if(!condition) throw "Message";
  //some code
}catch(ex){}

Если это проблема, я думал об использовании:

(function(){
     if(!condition) return;
})();

2 - Использование изображений с base64 также может улучшить использование памяти?

<img src="data:image/png;base64,[...]==" />

Или нет проблем?

3 - Я использую функцию для обработки результата AJAX, поэтому я могу использовать responseXML ...

if (o.readyState != 4) return;

var newdoc = document.implementation.createDocument(null, null, null);

var newhtml = document.createElement('div');

newhtml.innerHTML = o.responseText.replace(/script/ig, "");

newdoc.appendChild(newhtml);

newdoc.getElementById('...');

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

4 - Сбрасывать переменные, помогает или бесполезно?

var a = "something";
if(a=="something")
    //

//I'm not going to use the variable "a" anymore, so..
a = undefined; //Now i unset the variable

5 - Если вы добавляетеСобытие для элемента, или вы используете appenChild, это увеличивает память.

element.appendChild(newelement);

Если вы измените страницу, похоже, что память остается прежней .. Если я использую

window.addEventListener("unload", function() {
    element.removeChild(newelement)
}

Это тоже чем-то помогает?

Спасибо.

Извините за английский.

1 Ответ

0 голосов
/ 06 апреля 2011

4 и 5 числа.

Браузер действительно увеличивает память на каждое дополнительное событие \ элемент, но не уменьшает ее сразу же после удаления некоторых событий \ элементов.

В сборщике мусора у каждого браузера есть свой "Дао" :):

  • IE 6-8 вообще не очищает память (пока вы не закроете ее или не нажмете F5).

  • Для запуска сборщика мусора Chrome требуется до 5 минут или когда размер мусора достигает некоторого фиксированного значения.

  • Opera «съедает» больше памяти, чем любой другой браузер, но освобождает ее сразу после того, как она стала ненужной.

  • Быстрее всего FF почти 1 минута, чтобы очистить память от неиспользуемых данных.

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