2015-05-07 2 views
3

У меня есть приборная панель на моем телевизоре, и страница должна обновляться каждую секунду.Почему этот javascript обновляет утечку памяти?

В нижней части страницы у меня есть:

function startRefresh() { 
    $.get('', function(data) { 
     var newDoc = document.open("text/html", "replace"); 
     newDoc.write(data); 
     newDoc.close(); 
    }); 
} 
$(function() { 
    setTimeout(startRefresh,1000); 
}); 

Это прекрасно работает, за исключением того, что при каждой загрузке страницы вызывает использование памяти идти вверх, как сообщает chrome://memory-redirect/.

Есть ли способ исправить это? Мне не интересно создавать отдельную страницу для DIV и просто перезагружать эту часть.

FYI HTTP обновления заголовка и document.location = document.location как производится непригодной мерцающий

+0

Возможно, ошибка. Вы пробовали это в других браузерах? – Oriol

+0

Я пробовал ваш образец, и функция startRefresh запускается только один раз – devconcept

+2

Мое предположение было бы диспетчером событий нагромождения обработчиков без сброса объекта окна вместе с сбросом документа. В любом случае я бы избежал записи в документе и использовал iframe. iframe получит истинную перезагрузку. У него будет такая же проблеска, как и проблема белого цвета, но поскольку вы находитесь в iframe, вы cn воспользуетесь css и разрешите его с помощью https://css-tricks.com/prevent-white-flash-iframe/. Вы также можете поставить в очередь iframes вне экрана для более интересных переходов в вашем приложении TV. – Radio

ответ

0

Вы пробовали location.reload()?

function startRefresh() { 
    location.reload(); 
} 
$(function() { 
    setTimeout(startRefresh,1000); 
}); 

EDIT: После перечитывания вопроса, я понимаю, вы не просили альтернативный метод, но объяснение утечки памяти (который у меня нет).

+1

Решения, которые не представляют эту проблему, тоже хороши ... но этот тоже страдает от проблемы белого мерцания. –

1

Если вы используете Chrome, вы должны использовать «Временную шкалу» для записи использования памяти. Запустите временную шкалу, затем подождите, пока страница обновится несколько раз, а затем остановите график и посмотрите результаты. Если вы видите, что линия продолжает увеличиваться, это означает, что ваши объекты в памяти (или узлы DOM) никогда не выпускаются и мусор не собирается.

Я так и не использовал document.open/write, поэтому не знаю, может ли это вызвать проблемы с сборкой мусора, но я подозреваю, что это так.

Если вы четко обнаруживаете память с использованием временной шкалы, затем откройте вкладку «Профили» и сделайте снимок «Тепло» до и после перезагрузки страницы, затем используйте «сравнение», чтобы увидеть, что изменилось и насколько больше ваша память удар есть. Если, например, ваш старый скомпилированный код (или ссылки на obejct) все еще существует, плюс новый, то он объясняет вашу утечку.

Смежные вопросы