Реальная проблема, которая нуждается в решении: я работаю над большим приложением, исходный выпуск которого был около двух лет назад. Теперь мы добавляем новую страницу в приложение и замечаем какое-то странное поведение. Новый экран будет «всегда включен», это означает, что это экран по умолчанию в приложении, а выделенный ПК, на котором работает приложение, всегда будет отображать его по умолчанию. Через некоторое время (всего несколько минут на IE, как правило, намного больше на Chrome) все начинает плохо. Во-первых, анимация прокручивающих сообщений (если таковая имеется) становится изменчивой и медленной, в конечном итоге до такой степени, что они, кажется, перемещаются примерно на 1 пиксель в секунду. Черепство начинается через несколько минут в IE на машинах, которые мы используем, и через пару часов будет замедлен до обхода. К этому времени началось другое нечетное поведение: сам браузер будет медленно реагировать. На этом экране есть кнопка меню/входа, и есть задержка в 3-4 секунды, прежде чем что-нибудь произойдет, когда на нее нажмут. Другие визуальные элементы имеют аналогичную задержку перед обновлением, даже если они не имеют взаимодействия с пользователем.Ошибка утечки Javascript в методе рекурсивного опроса
Я и другие члены команды провели несколько дней, глядя на все, что находится на этой странице, и считают, что причина усугубляется тем, что, по-видимому, является утечкой памяти в службе, которую мы используем для опроса данных. Он отображается на каждой странице, в которой мы используем эту услугу, но мы считаем, что симптомы являются только проблемой на новом экране из-за большого количества визуальных сигналов (прокрутка, обновление значков/цветов и т. Д.), Многие из которых имеют интенсивную обработку/графику, которая запускается каждый цикл при обновлении данных и тот факт, что никто, вероятно, не оставит другие экраны в течение определенного промежутка времени, чтобы начать видеть симптомы на менее жестком -рабочая страница.
Я взял скриншот временной шкалы в инструментах разработчика Chrome, и это то, на что это похоже. Это похоже на каждую страницу, использующую нашу службу опроса.
Я создал a demo of just the polling и получил аналогичный график: . Он выглядит немного менее серьезным в демоверсии, но шаблон явно похож и выглядит как утечка памяти. Как мы можем устранить утечку памяти и устранить другие проблемы?
Некоторые соответствующий код:
var reload = function() {
$http({
method: 'GET',
url: 'api.txt',
timeout: 5000
})
.success(function(response) {
//do stuff
})
.error(function(data) {
//do other stuff
})
.finally(function() {
timer = $timeout(reload, 1000);
});
};
проверить фактические распределения/освобождения - это должно сказать вам * что * сохраняется/утечка. –
@ DanielA.White Как я могу проверить это? Я использовал вкладку «Профили» и проверял снимки/сравнивал их, но я не совсем уверен, что я ищу. Я не вижу ничего странного, но я никогда не пробовал отслеживать что-то подобное раньше. Откуда я знаю, что должно быть там, а что нет? – senschen
https://developers.google.com/web/tools/chrome-devtools/memory-problems/ –