• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

meine animation Funktion bitte testen

Die meisten Browser rufen Timeouts nur ca. alle 20ms auf. Eben weil Browser viel mehr machen müssen wofür sie auch Zeit brauchen. JS Timeouts sollen nicht den kompletten Browser einfrieren können.

Und noch mal: Animationen haben nichts mit dem Timeout zu tun, sondern sind Resourcenfressende JS Dinge. D.h. deine Beobachtungen sind keine Konsequenz der Timeouts, sondern dass der Browser mit etwas beschäftigt ist und dann Prioritäten setzt. Dann kann es passieren, dass eine JS Bewegung in einem Hintergrundtab nicht ausgeführt wird, weil es (für den Browser) nicht wichtig ist, sondern er es ist damit beschäftigt ein andere Tab zu fokusieren oder was auch immer du siehst.

Übrigens eine Beobachtung die auch im Rahmen dieser Diskussion gemacht habe, wenn du die Timeouts in der Timerschleife mit einem Wert um die 20ms aufrufst, laufen viele paralelle Animationen flüssiger.


Das Threads bisher in JS nicht eingeflossen sind, liegt wohl daran, dass es damals als es entwickelt wurde, keine Notwendigkeit dafür gab und es auch nicht so einfach Betriebsystemübergreifen umsetztbar war.
 
ja naja wenn Timeouts und Intervalle so geregelt sind, warum kann man dann Javascript nicht einfach multithreated machen ^^, das wäre doch viel logischer.
das verstehe ich nicht. was hat multifhreading damit zu tun, das timeouts und intervalle "so geregelt sind"?
natürlich könnte man js einfach multithreated machen, soll heissen timeouts, intervalle, alle events automatisch in einem eigenem thread laufen lassen, dann hast du aber ganz andere probleme, dann kann jeder thread durch jeden unterbrochen werden, dass musst du alles abfangen.

Wenn das browserintern so geregelt ist, regelt ein Browser die Timeouts und Intervalle aber immer nur für ein Tab, den öffnet mal mit strg+t während einer 10 sekündigen Animation einen Tab und klickt dann mal nach 5-10 Sekunden wieder auf den tab mit der Animation, dann sieht man das die intervalle erst dann fortgeführt werden.
klingt doch logisch, wozu sollen die timeouts für einen tab, den ich mir sowieso nicht ansehe weiterlaufen?

so könnte doch wenn es Browsergesteuert ist, wirklich alle 10 ms aufgerufen werden ohne Rücksicht auf den Code der ausgeführt wird.
nee, das ist ja gerade der vorteil, das der gerade ausgeführte code nicht unterbrochen wird. du kannst dich immer darauf verlassen, dass alles konsistent ist und musst nicht erst dafür sorgen.
 
Wenn das browserintern so geregelt ist, regelt ein Browser die Timeouts und Intervalle aber immer nur für ein Tab, den öffnet mal mit strg+t während einer 10 sekündigen Animation einen Tab und klickt dann mal nach 5-10 Sekunden wieder auf den tab mit der Animation, dann sieht man das die intervalle erst dann fortgeführt werden.
Das kann ich nicht nachvollziehen.
Ich hab mal mein Beispiel etwas umgebaut http://static.jstruebig.de/tween2.html

Die untere Animation dauert 5000ms und wenn sie fertig ist wird ein Event ausgelöst und die abgelaufene Zeit angezeigt. Auch wenn die Zeitdauer bis zu einer Sekunde über den 5Sek liegt, so wird die Animation aber an sich auch in einem Hintergrundtab ausgeführt.
 
Mir hat das mit den Timern keine Ruhe gelassen und ich hab jetzt mal ein wenig gesucht. Man findet leider viele Quellen, die glauben das Timeout und Interval Threads erzeugen. Vielleicht kommt das daher, dass in diesem Artikel https://developer.mozilla.org/en/Code_snippets/Threads davon gesprochen wird, wie man Threads mit Timer simuliert. Aber es wird nicht gesagt, dass es Threads gibt.

Das JS immer single thread ist (Ausnahme: workers) wird in diesen Artikel beschrieben http://ejohn.org/blog/how-javascript-timers-work/
und http://javascript.info/tutorial/events-and-timing-depth

Ich denke damit sind alle Fragen bezüglich setTimeout beantwortet.
 
Zurück
Oben