Дальнейшее разъяснение утечки памяти IE7 - PullRequest
0 голосов
/ 08 февраля 2012

Так что я считаю, что наткнулся на утечку памяти в IE7.Одна из наших страниц зависала, когда пользователь уходил от нее.После некоторой отладки я наткнулся на следующий фрагмент кода, который кажется виновником, учитывая, что страница прекрасно работает, когда я закомментирую ее.

$$('.someClass').each(function(item, index) {
    $(item).addEvent('click', function(e) {
        if (e) e.preventDefault();
        // ...

        // MEMORY LEAK??
        var userId = $(item).getElement('a').id.substr(10);

        // ...
    });
});

Это тот случай, когда вам нужно прервать цикл.между элементом DOM и переменной userId, верно?Я все еще немного борюсь с концепцией.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Я пытался это сделать (могу ли я предположить, что это mootools?) И могу подтвердить утечку.

Неважно, что вы делаете внутри каждой (), каждая () создает утечку. При каждой загрузке страницы я получаю 2 утечки, 1 для HTML-элемента и 1 для DIV-элемента.

DIV не является частью DOM (протестировал его без DIV внутри документа), он был создан mootools для целей тестирования. Утечки также происходят, когда я использую только это:

$$('.someClass').each(function(){}); 

Так что я могу предложить: не используйте mootools ^^


P.S: протестировано с mootools-core-1.4.4-full-compat.js, IE6 и sIEve

0 голосов
/ 08 февраля 2012

Там нет утечки памяти. userId это просто строковая переменная, которая не имеет никакого отношения к чему-либо. Как только он выходит из области видимости, браузер будет собирать мусор.

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