Утечка памяти в 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 после нескольких обновлений:

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

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

так что я был счастлив некоторое время, но оказалось, что память все еще протекает. С отключенным AdBlock он просто протекает немного меньше на страницу обновить.
2 ответов
сначала дайте имя вашему 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...он пытается помогите вам, загрузив соответствующие нагрузки с этого скрипта в качестве элементов кэша или что-то еще...
:)