Не думаю, что есть эффективный инструмент для обнаружения утечек памяти. Однако есть часть программного обеспечения, которую вы можете использовать для эмуляции IE 6-7-8 на вашем ПК, она называется IE Tester .
Самая распространенная утечка в Internet Explorer - это взаимодействие с JScript.
Когда объект DOM содержит ссылку
к объекту JavaScript (такое событие
функция обработки), и когда это
JavaScript-объект содержит ссылку
к этому объекту DOM, то циклический
структура сформирована.
- http://javascript.crockford.com/memory/leak.html
Эта циклическая структура - это то, с чем IE сталкивается с трудностями. Вы должны понимать, как формируются циклические ссылки (через замыкание ). Первым шагом будет сделать чистку ваших элементов DOM, прежде чем удалить их.
Это можно сделать с помощью общей функции, подобной этой:
function purge(d) {
var a = d.attributes, i, l, n;
if (a) {
l = a.length;
for (i = 0; i < l; i += 1) {
n = a[i].name;
if (typeof d[n] === 'function') {
d[n] = null;
}
}
}
a = d.childNodes;
if (a) {
l = a.length;
for (i = 0; i < l; i += 1) {
purge(d.childNodes[i]);
}
}
}
Каждый раз, когда вы удаляете элементы из DOM, вам сначала нужно использовать purge
. Вы даже можете написать обертку для этого
function safeRemove(el) {
purge(el);
el.parentNode.removeChild(el);
}
Конечно, это только отправная точка, поскольку она не поможет вам со ссылками в других местах (например, обработчики событий DOM2 или где-либо еще, хотя closure ). Вам следует проверить места, где вы удаляете элементы, и выяснить, какие функции ссылаются на них.
Эта проблема все еще существует в IE 6-7-8.