У меня есть страница в моем приложении, которая обновляет некоторый контент (список пользователей, которые в данный момент вошли в систему) с сервера каждые 10 секунд. Эти данные загружаются с использованием Ajax класса из фреймворка mootools , в частности, с Javascript, который выглядит следующим образом:
var xmldata = (function() {
new Ajax('xmldata.jsp?time='+$time(), {method: 'get', onComplete: dataLoaded, autoCancel: true}).request();
}).periodical(10000);
(который каждые 10 секунд создает объект Ajax
и вызывает его метод request()
, который при завершении вызовет метод dataLoaded()
).
Если пользователь оставляет окно своего браузера открытым на этой странице в течение примерно 45-60 минут, то попытка перехода в другое место приведет к тому, что IE (v7 наверняка, v6 также, как я полагаю, Firefox или Chrome не имеют этой проблемы), чтобы отобразить следующее всплывающее окно:
Прекратить запуск этого скрипта?
Сценарий на этой странице вызывает медленную работу Internet Explorer.
Если он продолжает работать, ваш компьютер может перестать отвечать.
Теперь мне кажется, что это, вероятно, вызвано какой-то утечкой в базовом скрипте в среде mootools - либо слишком много вызовов Ajax.request()
стоят в очереди для вызова, либо некоторые объекты не очищаются должным образом даже если предполагается, что в фреймворке есть некоторые функции сборки мусора.
Как лучше всего проанализировать, что сделал движок Javascript в IE под прикрытием? Есть ли какой-нибудь возможный способ определить, верна ли какая-либо из моих гипотез?
Я видел, что в аналогичный вопрос , кто-то предложил , используя IBM Page Profiler для устранения этой проблемы. Я пытался использовать Page Profiler и не добился большого успеха - это кажется полезным, если у вас возникли проблемы с начальной загрузкой страницы (чтобы проанализировать, какой компонент вызывает чрезмерную задержку загрузки), но это не кажется чтобы иметь возможность анализировать, что происходит с Javascript, запущенным на странице после того, как она была полностью загружена. В Page Profiler я вижу, что асинхронные вызовы xmldata.jsp запрашиваются каждые 10 секунд, но Page Profiler показывает только то, что сервер отвечает нормально (примерно через 600 мс), но не знает, как сценарий родительской страницы использует эти данные.
Кроме того, в этом посте из закрытого дискуссионного списка mootools, кто-то предлагает удалить код, который регистрирует прослушиватель unload
, чтобы вызвать метод сбора мусора для решения этой проблемы - но это кажется как разрешение симптома проблемы, а не самой проблемы.