Also, ich habe gehört, dass Sie angeblich alle phantastischen Echtzeit-Spiele mit JS in diesen Tagen tun können. Und ich bin kein Anfänger, also sollte ich es versuchen. Schrieb einige Mikro- (unvollständige) Physik-Engine mit einer Kollisionserkennung, alle süß. Etwas verzögert, aber erwartete GC Interrupts. Also habe ich versucht, jede Zuweisung zu minimieren, bis ich nichts mehr sehen konnte, das Speicher in Spielschleife zuweisen sollte. Keine Zuweisungen => keine Aufräumarbeiten. Aber hier ist, was ich bekomme: Was isst meine Erinnerung? (Die SAW, JS mem usage edition)
Nun, das ist überhaupt nicht sauber. Also habe ich versucht, meine Sachen aus der Spieleschleife auf verschiedene Arten zu entfernen. Immer noch SAH. Also nein, ich präsentiere Ihnen den kompletten Code, der das erzeugt:
<html><body><script>
function draw() { console.log(1); }
;(function() {
function main(tFrame) { draw(); window.requestAnimationFrame(main); }
main();
})();
</script></body></html>
Erstaunlich? Nun, das verwendet requestAnimationFrame, wie es scheint, das sollte für eine reibungslose Leistung verwendet werden. Zuerst habe ich versucht, Intervall so einzustellen:
<html><body><script>
function draw() { console.log(1); }
window.setInterval(draw, 0);
</script></body></html>
Genau das gleiche!
Das scheint völlig inakzeptabel, aber ich habe keine Ideen, wie man diese SAW stoppen kann. Ich habe viel über das Debuggen von Speicher und so weiter nachgedacht, das war während ich dieses Problem in meinen Zeichen- und Aktualisierungsfunktionen hatte. Aber diese zu Schnipsel, haben im Grunde nichts, und doch erzeugen sie diese Erinnerungspattern. Vielleicht ist es mein Browser? Oder ist es unausweichlich und JS ist für irgendetwas in Echtzeit unbrauchbar? Ich würde gerne glauben, dass jemand im Internet etwas weiß, was ich nicht tue, da viele Leute Wunder mit JS versprechen. Was mache ich in diesen Schnipsel falsch?
BEARBEITEN: Übrigens ändert das Entfernen des Konsolenprotokolls nichts, falls jemand denkt, dass das Problem ist.
Alle Browser-Plugins laufen im Hintergrund? –
Auch wenn jemand dies nicht reproduzieren kann, wäre es interessant, OS und Browser Version zu hören. Ich bin im Linux-Test mit Chromium 35.0.1916.153. – morphles
@sixfingeredman nein, nur ein paar offene Tabs auf leer (gut etwas wurde geöffnet, aber ich "backed"). Nicht, dass das irgendeinen Effekt haben sollte, da chrome Process Isolation hat, und ich hoffe, dass es erkennen kann, ob das Plug-in oder die Seite CPU und insbesondere mem verwendet. – morphles