Alexander: Wie schnell ist JavaScript?

hallo,

bei meinen sperlichen versuchen einen Countdown in JS zu schreiben, habe ich folgenden Trick angwandt, der mir die Sache erleichtern sollte. Ich habe für 1/100 sec, für sec und für min jeweils eine eigene Funktion gebaut. Der Countdown soll nur optischen Zwecken dienen, weshalb auch die 1/100 sec eingeblendet sein sollen (sieht halt coller aus...).

Leider laufen sie Funktionen nicht syncron, d.h. nach 100 1/100 sec. ist nicht eine um (sonern einige sec mehr...) und nach 60 sec. ist nicht einen min um, die min springt schon nach ca. 56 sec um. Meine Frage ist nun, wieso dies so ist. Ich weiß, daß es natürlich Rechnzeit benötigt, die Funktionen zu berechnen und anzuzeiegn. Aber das dort so große Differenzen entstehen, hätte ich nicht erwartet, zumal mein Rechner (P3) eigentlich nicht der langsamste ist.

Unter steht ein Link, da könnt Ihr Euch das ganz ja mal angucken.

Wer im übrigen einen fertigen Countdown in JS geschrieben hat, der so ca. 2 Std. zählen kann und auch 1/100 sec. anzeigt, kann mit ja mal mailen ;)

Viele Grüße

Alex :)

  1. Ups, der Link steht ja oben und nicht unten...

    Also hier nochmal: http://www.bikepages.de/tmp/ja.html

    P.S.: Bringt dafür ein bis zwei Minuten Zeit mit!

    1. Moin

      Also hier nochmal: http://www.bikepages.de/tmp/ja.html
      P.S.: Bringt dafür ein bis zwei Minuten Zeit mit!

      Du hast vergessen zu erwähnen dass man auch einen IE mitbringen muss (wg. document.all), aber lassen wir das...

      Verschiedene Zähler für die einzelnen Zeitbestandteile zu verwalten ist eine schlechte Idee. Das Warum hast du ja gesehen. Besser ist es _einen_ Zähler zu nehmen, nämlich den für die 1/100 Sekunden und die anderen Werte daraus abzuleiten:
      jede 1/100 sekunde:  zaehler++;
      hundertstelsekunden = zaehler % 100;
      sekunden = Math.floor((zaehler / 100) % 60);
      minuten = Math.floor(zaehler / 6000);

      Dann können die einzelnen Anzeigen zumindest nicht mehr voneinander abweichen. Ob sie genau genug gehen ist eine andere Frage.
      Wenn du es unbedingt genau haben willst (und so, dass zum Beispiel einmal aussetzen beim Zähler nicht weiter stört, immerhin sind die meisten Systeme heutzutage ja multitaskingfähig), dann lies bei http://selfhtml.teamone.de/javascript/objekte/date.htm#get_time weiter und benutz die aktuelle Uhrzeit im Zusammenhang mit einem anderen Zeitpunkt um deinen Timer anzuzeigen.

      --
      Henryk Plötz
      Grüße aus Berlin

      1. Das ist richtig, denn die Timer werden bei rechenintensiven Aufgaben immer wieder angehalten, bis die Aufgaben erledigt sind. Darum immer von der aktuellen Uhrzeit ausgehen.

  2. Hallo!

    Um auf deine Frage zu antworten:

    F: Wie schnell ist Javascript?
    A: Unterschiedlich!

    Ich denke, Opera gehört nicht zu den Browsern, die Javascript besonders schnell ausführen. Vor allem, wenn Layer zu verschieben sind, lahmt er unter Umständen in nerviger Weise, und man sollte Animationen besser nicht übertreiben.

    Abgesehen davon ist die Geschwindigkeit natürlich von der Rechenleistung des Computers abhängig. Du hättest also das Problem, daß ein langsamer Rechner viel langsamere "Sekunden" zählen würde als ein schneller Rechner.

    - Sven Rautenberg

    1. Hi !

      F: Wie schnell ist Javascript?
      A: Unterschiedlich!

      Stimmt.

      Ich denke, Opera gehört nicht zu den Browsern, die Javascript besonders schnell ausführen. Vor allem, wenn Layer zu verschieben sind, lahmt er unter Umständen in nerviger Weise, und man sollte Animationen besser nicht übertreiben.

      In meiner Facharbeit hab ich ja unteranderem Windows-Steuerelemente in JavaScript nachprogrammiert. Eine der daraus resultierenden Anwendungen war eine Art Windows-Explorer-Nachbildung, (fast) genauso (un-)funktionell wie das original.

      Die ersten Unterschiede ließen sich schon beim Laden der Scripte (ingesamt 2500 Zeilen, die wiederum mehrere hundert Zeilen HTML-Code erzeugen) feststellen:
      IE: ~2 Sekunden
      Mozilla: ~8 Sekunden
      NC4: bis zu 30 Sekunden

      Eines der Scripte ist auch ein Listview, bei dem man auch die Spalten dynamisch in der Größe ändern kann. Das geht beim IE praktisch in Echtzeit (d.h. keine Wartezeit), Mozilla braucht gut 5 Sekunden für die Berechnungen und Netscape 4 läßt sich teilweise über eine Minute Zeit (man kann die Berechnung jedes Pixels nachverfolgen).

      Vor allem bei Netscape 4 stiegen die Berechnungszeiten mit zunehmender Anzahl von Layern drastisch an, während beim IE bei ~100 Divs noch keine Leistungseinbrüche zu sehen waren (ab 200 ging auch er langsam in die Knie).

      Testsystem war ein PIII-450 mit 256Mb RAM unter Windows 2000 SP2

      Opera konnte ich leider nicht testen, weil der die Skripte nicht überissen hat :-(

      Ciao,

      Harry