Quindi, ho sentito che si può presumibilmente fare tutti i fantasiosi giochi in tempo reale che utilizzano JS in questi giorni. E non sono un principiante, quindi dovrei provarci. Ha scritto del micro motore (incompleto) fisico con un po 'di rilevamento delle collisioni, tutto dolce. Un po 'troppo lento, si aspettava che GC si interrompesse. Quindi ho cercato di minimizzare qualsiasi allocazione, fino a quando non sono stato in grado di vedere tutto ciò che dovrebbe allocare memoria nel ciclo di gioco. Nessuna allocazione => nessuna pulizia, però. Ma ecco quello che ottengo: Cosa sta mangiando la mia memoria? (L'edizione di utilizzo di SAW, JS mem)
Ora, questo non è affatto pulito. Così ho provato a rimuovere le mie cose dal loop di gioco in vari modi. Ancora SAW. Quindi no, vi presento il codice completo che genera questo:
<html><body><script>
function draw() { console.log(1); }
;(function() {
function main(tFrame) { draw(); window.requestAnimationFrame(main); }
main();
})();
</script></body></html>
Incredibile? Bene, questo usa requestAnimationFrame in quanto sembra questo è quello che dovrebbe essere usato per prestazioni regolari. All'inizio ho provato l'intervallo impostato in questo modo:
<html><body><script>
function draw() { console.log(1); }
window.setInterval(draw, 0);
</script></body></html>
Esattamente la stessa cosa!
Questo sembra completamente inaccettabile, ma non ho idee su come fermare questo SAW. Ho guardato molto sul debug della memoria e cose del genere, mentre pensavo che il problema riguardasse le mie funzioni di disegno e aggiornamento. Ma questi ai frammenti, non hanno praticamente nulla, eppure producono quel ricordo di memoria. Forse è il mio browser? O è inevitabile, e JS è inutilizzabile per qualsiasi cosa in tempo reale? Mi piacerebbe credere che qualcuno sul web ne sappia qualcosa, perché ci sono molte persone che promettono meraviglie con JS. Cosa sto sbagliando in questi frammenti?
MODIFICA: tra l'altro la rimozione del registro della console non cambia nulla, nel caso in cui qualcuno pensi che questo sia il problema.
Qualsiasi plug-in del browser in esecuzione in background? –
Anche se qualcuno non può riprodurre questo, sarebbe interessante sentire la versione del sistema operativo e del browser. Sono in test Linux con Chromium 35.0.1916.153. – morphles
@sixfingeredman no, solo un paio di schede aperte su bianco (beh, qualcosa è stato aperto ma io "backed"). Non che questo dovrebbe avere alcun effetto in quanto Chrome ha l'isolamento del processo, e spero che possa rilevare se plug-in o pagina sta usando CPU, e in particolare mem. – morphles