Matti Maekitalo: + (Forumsauslese) Prozessorauslastung

Hallo

Ich habe eine Frage zum Artikel in der Forumsauslese: </selfhtml/sfausles/tsfa_tci.htm#a5>. Dabei ist mir folgendes aufgefallen. Die Funktion slide() (unten ist nochmal der Quelltext) ruft sich ja nach 1000 ms selbst wieder auf.
Wird dabei die aufrufende Funktion beendet, oder wartet diese, bis die aufgerufende Funktion beendet wird?
Wenn die aufrufende Funktion wartet, dann wird ja mit der Zeit immer mehr der Prozessor beansprucht. Das ist bei heutigen Hochleistungsmaschinen wohl zu vernachlässigen, aber man könnte dies ja ein wenig ändern.

Hier der alte Quelltext:

function slide()
{ if (document.all)
   {
   if (bar.style.color == "white")
       { bar.style.color = "blue"; }
       else { bar.style.color = "white";}
    setTimeout("slide()",1000);
   }
}

Hier mein Vorschlag (gesamter Quelltext)

<head>
<script language="JavaScript">
<!--
if (document.all){ blink = window.setInterval("slide()",1000); }

function slide()
{
  if (bar.style.color == "white")
  { bar.style.color = "blue"; }
    else { bar.style.color = "white";}
}

//-->
</script>
</head><body bgcolor="#FFFFFF">

<div id="bar" style="color:blue"><blink><h1>text</h1></blink></div>
<p><a href="javascript:window.clearInterval(blink);">Hör auf mim Blinken</a></p>
</body>

Wie ihr sehen könnt, habe ich die Funktionsaufrufe des setTimeout durch  einen setInterval() ersetzt. Dies sollte den Prozessor doch entlasten. Ausserdem gibt es dem Benutzer die Möglichkeit, das Blinken wieder abzustellen, und, mit einer neuen Funktion, könnte er es wieder anfangen lassen. Ich habe das mal zum Beispiel in dem Link gezeigt. Klickt man auf ihn, hört das Blinken auf (wenigstens für geplagte IE-User 8-))

Was meint ihr dazu.

  1. Hallo

    die alte funktion wird alle 1000 ms aufgerufen, ausser das der timer 'belastet' wird dürfte da nich allzuviel Prozessorauslastung sein. setInterval dürfte etwas ähnliches machen. man kann ürbrigens auch eine setTimeout beenden, bzw. eigentlich wird er ja nur einmal ausgeführt und in dieser funktion immer wieder erneuert, indem man clearTimeout(timerX) sagt.
    in diesem falle müßten folgende ergänzungen gemacht werden.

    timer = setTimeout("slide()",1000);

    <a href="javascript:window.clearTimeout(timer);">Hör auf mim Blinken</a></p>

    aber, letztendlich dürtfe das gehuppt wie geduppt sein.

    Struppi

  2. Auch Hallo!

    Ich habe eine Frage zum Artikel in der Forumsauslese: <../../sfausles/tsfa_tci.htm#a5>. Dabei ist mir folgendes aufgefallen. Die Funktion slide() (unten ist nochmal der Quelltext) ruft sich ja nach 1000 ms selbst wieder auf.
    Wird dabei die aufrufende Funktion beendet, oder wartet diese, bis die aufgerufende Funktion beendet wird?

    Keines von beiden. Es wird, wie der Funktionsname schon sagt, ein Timeout gesetzt. Das merkt sich der Browser / das OS im Hintergrund und beeinflusst die Ausfuehrung des aktuellen Codes nicht. Erst nach Ablauf des Timeouts wird urploetzlich der angegebene Code ausgefuehrt, wie von Geisterhand aufgerufen.

    Wenn die aufrufende Funktion wartet, dann wird ja mit der Zeit immer mehr der Prozessor beansprucht. Das ist bei heutigen Hochleistungsmaschinen wohl zu vernachlässigen, aber man könnte dies ja ein wenig ändern.

    Wenn die Funktion warten *wuerde*, muesste das trotzdem nicht den Prozessor belasten. Fuer solche Aufgaben stellt das OS normalerweise entsprechende Funktionen bereit. Leider gibt es ein solches sleep in JS nicht, aber die JS-Engine kann ja trotzdem Zugriff darauf haben.

    Hier der alte Quelltext:

    function slide()

    Nebenbei: Wie zum Teufel kommt man auf den Namen slide fuer eine Funktion, die ein Blinken realisieren soll?

    Hier mein Vorschlag (gesamter Quelltext)
    [...]

    Macht keinen Unterschied, ausser dass das Blinken leichter abgeschaltet werden kann.

    So long