was meinst du denn mit Bildschirmbildaufbau? den inhalt des grafikspeichers auf den monitor projizieren?Sollte er aber (ich kenne jetzt die Browserimplementation nicht so gut, dass ich sagen könnte, dass jeder Browser das kann). Vor jedem neuen Bildschirmbildaufbau ist ein guter Renderzeitpunkt.
damit hat der browser gar nichts zu tun. der browser ist nur ein fenster von 100en die angezeigt werden.
der browser zeichnet nicht direkt in den grafikspeichers. das läuft änderungsgesteuert. unter windows jedenfalls und das wird überall ähnlich laufen.
der browser macht eine änderung, die sich auf die anzeige auswirkt, daraufhin meldet er das dem BS (UpdateWindow)
das BS sendet an den browser eine WM_PAINT message
der browser zeichnet seine änderungen in ein abstraktes device
um den rest kümmert sich das BS
Code:
Chrome:
animation: mean: 19.922310756972113 ± 1.395760598544772
setTimeout: mean: 4.93339911198816 ± 0.5161472008683037
Firefox:
animation: mean: 20.044088176352705 ± 2.0263940055111886
setTimeout: mean: 4.156691604322527 ± 2.249589162193331
IE:
animation: mean: 20.014 ± 1.240082255336312
setTimeout: mean: 3.360551075268817 ± 1.4161283800521635
Opera:
animation: mean: 19.882703777335983 ± 1.3227475493268288
mean: 4.995504495504496 ± 0.1563819520112744
damit können wir eigentlich hier aufhören, ich sehe hier keine großartigen unterschiede in den abweichungen zw. animation und setTimeout, worum es ja ursprünglich ging
weil 4ms ja auch nicht nötig ist bzw. die 20ms, oder wie du selbst sagtest, die bildfrequenz des monitors sicher schon ein gutes bewegtes bild erzeugen.Auch sieht man, dass zwar ca. alle 4ms eigentlich ein neues Rendern nötig ist (der Zufallstext hat sich geändert) aber trotzdem nur alle 20ms der Repaint ausgeführt wird...
laut wikipedia:
warum sollte man da öfter ändern als überhaupt dargestellt wird?Das menschliche Gehirn nimmt ab etwa 14 bis 16 Bildern pro Sekunde (individuell verschieden) aufeinanderfolgende Bilder als bewegte (aber nicht unbedingt ruckelfreie) Szene wahr
so arbeitet aber keine anwendungWenn mein Monitor 50 Hz hat, hab' ich alle 20 ms einen idealen Renderzeitpunkt... das kann man wunderbar vorhersehen... also ich kann das.
wenn ich einen test mache, mit einem button(so, dass der browser nicht intern optimieren kann und so evtl. timeouts mit animationen zusammenlegt), bekomme ich bei 1000 aufrufen ohne den button zu drücken so zw. 30 und 60 abweichungen größer 1ms vom mittelwertDer Test oben zeigt etwas anderes. Aber jetzt verstehe ich allmählich, was dein Punkt ist.
wenn ich jetzt den button zwischendurch immer mal drücke, welcher ein element ins dom einfügt, werden das 200 bis 250 abweichungen