Ho una pagina Web che avvia uno script HTML5 SharedWorker
. L'utilizzo della memoria Chrome aumenta ogni volta che questa pagina viene ricaricata (premendo F5).Perdita di memoria in Chrome usando Shared Worker?
Lo script di lavoro è molto semplice. Ogni secondo (utilizzando setInterval
) viene inviato un messaggio alla porta connessa.
Sembra che il processo di lavoro sia terminato e riavviato ogni volta che si preme F5. Questo è quello che mi aspetterei poiché il lavoratore non è effettivamente condiviso da più di un "documento". Tuttavia, non riesco a capire perché l'utilizzo della memoria aumenta ad ogni aggiornamento.
Qualcuno sa perché questo sta accadendo?
Dato che la memoria aumenta ogni volta che la pagina viene ricaricata, mi viene in mente che non posso utilizzare affatto i lavoratori condivisi in Chrome. Qualcuno è stato in grado di farlo senza problemi di memoria?
UPDATE
Questo è il codice HTML di hosting:
<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>
... e questo è 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]);
};
La pagina di hosting inizia/si collega ad un lavoratore condiviso e emette ciò che viene ricevuto da esso.
Il codice worker mantiene un elenco di porte connesse e invia un messaggio a tutti una volta al secondo.
Questa è roba semplice. Eppure, ogni volta che la pagina di hosting viene ricaricata in Chrome. Il carico utile della memoria per quella scheda è aumentato.
Il seguente mostra l'utilizzo della memoria di Chrome dopo un paio di rinfresca:
... dopo aver aggiornato un po 'Sto raggiungendo 250 MB ...
Sto esaurendo le idee, pensando che questo deve essere un bug in Chrome. Qualcuno può darmi una sorta di puntatore?
UPDATE 2
Disabilitare la mia estensione AdBlock sembrava per risolvere il problema:
quindi ero felice per un po ', ma si è scoperto che la memoria è ancora in fase trapelato. Con AdBlock disabilitato sta perdendo un po 'meno per pagina di aggiornamento.
Se si avvia Chrome con il flag '--purge-memory-button', quindi si apre il Task Manager di Chrome e si fa clic sul pulsante Purge Memory, la memoria dell'estensione torna al suo livello iniziale o sembra ancora gonfio? –
@Chris È ancora gonfio. La memoria della pagina di hosting è gonfia. Il thread in background (estensione) non è gonfio, viene riavviato (scompare e riappare nel task manager) ad ogni aggiornamento. –