Утечка памяти в Chrome с использованием Shared Worker?

У меня есть веб-страница, которая запускает скрипт HTML5 SharedWorker. Использование памяти Chrome увеличивается каждый раз, когда эта страница перезагружается (нажатие F5).

Рабочий скрипт очень прост. Каждую секунду (используя setInterval) на подключенный порт отправляется сообщение.

Кажется, что рабочий процесс завершается и перезапускается каждый раз, когда я нажимаю F5. Это то, что я ожидал, поскольку работник на самом деле не используется более чем в одном «документе». Однако я не могу понять, почему использование памяти увеличивается при каждом обновлении.

Кто-нибудь знает, почему это происходит?

Учитывая, что память увеличивается каждый раз, когда страница перезагружается, я думаю, что я вообще не могу использовать общих рабочих процессов в Chrome. Кто-нибудь смог сделать это без проблем с памятью?

ОБНОВЛЕНИЕ

Это HTML-код хостинга:

<div id="output"></div>
<script type="text/javascript" src="/scripts/jquery-1.4.4.js"></script>
<script type="text/javascript">
$(function () {
    var worker = new SharedWorker("/scripts/worker.js") 

    worker.port.onmessage = function(e) {
        $("#output").append($("<div></div>").text(e.data));
    }; 

    worker.port.start();
});
</script>

...и это worker.js:

var list = [];

setInterval(function () {
    for (var i = 0; i < list.length; ++i) {
        list[i].postMessage("#connections = " + list.length);
    }
}, 1000);

onconnect = function (event) {
    list.push(event.ports[0]);
}; 

Страница хостинга запускается/подключается к общему воркеру и выводит все, что от него получено.

Рабочий код хранит список подключенных портов и отправляет им сообщение раз в секунду.

Это простые вещи. Тем не менее, каждый раз страница хостинга перезагружается в Chrome. Полезная нагрузка памяти для этой вкладки увеличена.

Ниже показано использование памяти Chrome после нескольких обновлений:

После нескольких обновлений я достиг 100 МБ

...после обновления еще немного я достиг 250 МБ...

Достижение 250 МБ после обновления

У меня заканчиваются идеи, я думаю, что это ошибка в Chrome. Может ли кто-нибудь дать мне какой-то указатель?

ОБНОВЛЕНИЕ 2

Отключение моего расширения AdBlock, похоже, решило проблему:

Запуск без AdBlock

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


person Mårten Wikström    schedule 18.08.2011    source источник
comment
Если вы запускаете Chrome с флагом --purge-memory-button, затем открываете диспетчер задач Chrome и нажимаете кнопку «Очистить память», память вашего расширения возвращается к исходному уровню или она все еще кажется раздутой?   -  person Chris McFarland    schedule 19.08.2011
comment
@Chris Он все еще раздут. Раздута память страницы хостинга. Фоновый поток (расширение) не раздувается, он перезапускается (исчезает и снова появляется в диспетчере задач) при каждом обновлении.   -  person Mårten Wikström    schedule 19.08.2011


Ответы (1)


Похоже, команда Chromium решила эту проблему. Я больше не могу это воспроизвести.

person Mårten Wikström    schedule 13.08.2012