Утечка памяти в 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]);
}; 

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

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

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

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

After refreshing a couple of times I've reached 100 MB

...после обновления еще немного я достигаю 250 МЕГАБАЙТ...

Reaching 250 MB after some more refreshing

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

обновление 2

отключение моего расширения AdBlock, казалось, исправило проблему:

Running without AdBlock

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

2 ответов


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


сначала дайте имя вашему SetInterval myInterval = setInterval ("change ()", 1000);

затем на PageExit или Оставить etc

clearInterval (myInterval); или привязка к другому событию stop...

пример:

<script language="JavaScript">

/* Image Preloading */
a = new Image();a.src = "screw.jpg";
b = new Image(); b.src = "washer.jpg";
c = new Image(); c.src = "capnut.jpg";
d = new Image(); d.src = "coffee.gif";
//end image preloading

pix = new Array("screw.jpg","washer.jpg","capnut.jpg","coffee.gif");

var i = 0;
var counter = 1;

function slideshow(){
ImgPreload = setInterval("change()", 1000);
}

function change(){
  document.images.pic.src = pix[i];
  i = i + 1;
  if (i > (pix.length - 1)) {i = 0; counter = counter + 1;}
  if (counter > 2) {clearInterval(ImgPreload);}
}
</script>

хотя это не конкретно то, что вы делаете, это хороший ресурс для аналогичного обстоятельства. Без clearInterval и триггера ваши использования памяти автоматически кэшируются в качестве базового для webkit...он пытается помогите вам, загрузив соответствующие нагрузки с этого скрипта в качестве элементов кэша или что-то еще...

:)