У меня есть веб-страница, которая запускает скрипт 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 после нескольких обновлений:
...после обновления еще немного я достиг 250 МБ...
У меня заканчиваются идеи, я думаю, что это ошибка в Chrome. Может ли кто-нибудь дать мне какой-то указатель?
ОБНОВЛЕНИЕ 2
Отключение моего расширения AdBlock, похоже, решило проблему:
Так что я немного порадовался, но оказалось, что утечка памяти все еще происходит. С отключенным AdBlock утечка немного меньше при каждом обновлении страницы.
--purge-memory-button
, затем открываете диспетчер задач Chrome и нажимаете кнопку «Очистить память», память вашего расширения возвращается к исходному уровню или она все еще кажется раздутой? - person Chris McFarland   schedule 19.08.2011