Timer-Script läuft immer langsamer ab
twb
- javascript
Frage an die wahren Javascript-Könner, zu denen ich ganz offensichtlich nicht zähle: Meine Absicht war es, eine HTML-Seite mit Javascript-Uhr (inkl. Weltzeiten und Chrono) zu schreiben. Nun, das Ding läuft (URL siehe unten) - das Script läuft einmal pro Sekunde ab und liest die Systemzeit aus, um sie dann via generiertem HTML und CSS anzuzeigen. Mein Problem: Die Uhr wird immer langsamer, so dass das Script schon nach kurzer Zeit mehr als eine Sekunde benötigt. Besonders ärgerlich: Damit ist auch die realisierte Chronofunktion für die Katz. Was habe ich falsch gemacht, dass das Script sich immer mehr verlangsamt?
Hallo,
bei mir is eher das Problem, daß die Uhr zu schnell läuft, sie überspringt bei mir ca 5 Sekunden/halbe Minute.
Hallo,
da die Seite nicht im Mozilla läuft, war ich jetzt zu faul, mir dein Problem näher anzusehen.
Ich habe mir jedoch kurz den Code angesehen und mir ist folgendes aufgefallen. Irgendwo steht dies:
if(d==0)d="Su";
if(d==1)d="Mo";
if(d==2)d="Tu";
if(d==3)d="We";
if(d==4)d="Th";
if(d==5)d="Fr";
if(d==6)d="Sa";
if(m==0)m="Jan";
if(m==1)m="Feb";
if(m==2)m="Mar";
if(m==3)m="Apr";
if(m==4)m="May";
if(m==5)m="Jun";
if(m==6)m="Jul";
if(m==7)m="Aug";
if(m==8)m="Sep";
if(m==9)m="Oct";
if(m==10)m="Nov";
if(m==11)m="Dec";
Du ordnest hier wohl den Tagen und Monaten die entsprechenden Namen zu. Um diese 1000
If-Abfragen zu vermeiden, würde man in der Regel ein Array mit den Namen erzeugen und dann
per Index auf die Namen zugreifen.
Etwa so:
var monatsnamen = new Array("Jan", "Feb", "Mar", ....., "Dec");
var wochentagsnamen = new Array("Su", "Mo", "Tu", "We", "Th", "Fr", "Sa");
....
....
....
m = monatsnamen[m];
d = wochentagsnamen[d];
Das nur als kleinen Stil-Tip.
Gruß
Tobias
Hallo Thomas!
Du rufst
setTimeout("w()",1000);
am Ende der Funktion w() erneut auf. Dadurch addiert sich die Laufzeit der Funktion zu der gewünschten einen Sekunde.
benutze stattdessen:
timer=setIntervall("w()",1000);
Das darfst nur einmal machen, die Funktion w() wird dann automatisch alle Sekunde aufgerufen.
Möchtest du anhalten:
clearIntervall(timer);
Die Funktion w() wird jetzt nicht mehr aufgerufen.
Gruss,
Carsten