Sven Rautenberg: setInterval läuft so schnell, wie vorgesehen

Beitrag lesen

Moin!

und an der Stelle muss ich gleich sagen das der von mir gepostete Code Müll ist, den setzte ich nicht ein, der war nur zur Visualisierung gedacht!

Du ahnst, wie ernst du genommen wirst, wenn du Problemlösungen zu nichtgenutztem Code wünschst?

Umfeld: Funktion die sich selbst aufruft mit settimeout am Ende (die Werte des timeouts in ms sind linkerhalb unten), ein div soll sich damit 450 Pixel weit nach rechts bewegen und das in 3 Pixel-Schritten. Danach soll die Zeit in ms ausgeben werden die die Funktion benötigt hat (rechterhalb unten) um diese 450 pixel zu zählen (150 DDurchläufe).

Timeout         Benötigte Zeit
1ms  1600ms
2ms  1600ms
5ms  1600ms
10ms  1600ms
11ms  1790ms
12ms  2000ms
15ms  2530ms
20ms  3450ms
40ms  6580ms

Wie du siehst, benötigt die Funktion selbst etwa 10 Millisekunden. Bei 150 Durchläufen also 1500 Millisekunden. Und offenbar sind noch 100 Millisekunden zusätzlich verbratene Zeit mit drin.

Wählst du 40 Millisekunden als Zwischenzeit, hast du 40*150 = 6000 Millisekunden Ausführungszeit, plus 580 Millisekunden.

580 ms verhalten sich zu 6000 ms ungefähr so, wie 100 ms zu 1500 ms - das ist eine zeitliche Ungenauigkeit, die vollkommen im Rahmen liegt, etwa 10%.

Es entspricht halt derzeitigem Browserverhalten, siehe http://ejohn.org/blog/analyzing-timer-performance/.

Abgesehen davon ist die benötigte Zeit ja absolut in Ordnung, sie entspricht deinen Vorgaben.

Das Ergebnis ist oben ja deutlich zu sehen :-(

Richtig. Welches Problem siehst du bei dem Ergebnis? Was kritisierst du genau?

Achja und wenn jemand nochnicht weis was ich Eigentlich vorhab....
Ich suche händeringend nach einer Möglichkeit in Javascript um Elemente einer Site flüssig von A nach B zu bewegen und das flott, ruckelfrei und ultrasmooth wenn ihr wisst was ich damit meine....

Diese Möglichkeit existiert nicht. Zumindest nicht in existierenden Browsern. Denn die haben mit der zeitlich korrekten Ausführung von Timern, egal ob Timeout oder Interval, so ihre Probleme. Es war bislang auch noch nie wirklich eine Anforderung gewesen, da man Animationen mit Javascript aufgrund der langsamen Darstellung und der langsamen Ausführungsgeschwindigkeit von Javascript und DOM-Operationen eigentlich eher vermieden hat. Erst mit dem Aufkommen der entsprechenden Frameworks (Prototype, jQuery, etc.) und der damit verbundenen browserübergreifenden Animationsmöglichkeit ist der Fokus der Entwicklung von Javascript-Engines plötzlich auch auf deren zeitliches Verhalten gerückt.

Trotzdem hast du auf den finalen Darstellungspart mit Javascript absolut keine Einflußmöglichkeit. Du sagst dem Element lediglich, wo es sich - mit CSS - denn bitteschön befinden soll; wie schnell der Browser es dort hinmalt, liegt außerhalb deines Einflußbereichs.

Wenn da jemand eine Idee zu hat wäre ich echt dankbar.
Aber bitte kommt mir nicht mit irgendeineinem Framework daher. Ich will das selber Coden(mit hilfe des Forums ;-)). Das muss doch irgendwie Möglich sein..... oder ... oder nicht .... ich beginne daran zu Zweifeln.

Grundsätzlich hat man immer die Wahl, das Knowhow eines Frameworks einzusetzen, oder sich den ganzen Krams selbst zu erarbeiten - inklusive aller Browserversionsprobleme, die auftreten werden.

- Sven Rautenberg

--
"Love your nation - respect the others."