Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[javascript] Funkcja sleep/wait.
Wielu początkujących programistów języka JavaScript szuka funkcji typu sleep/wait, której (nie)stety nie znajdzie. Poszukuje wtedy jej “symulacji”.. ale nie tędy droga.
Spotkałem się z dwoma implementacjami metody sleep/wait, przy czym jedna była “lepsza” od drugiej. Pierwsza z nich wyglądała mniej więcej tak:
-
function sleep(time){
-
time = time * 1000;
-
var start = (new Date()).getTime();
-
while(true){
-
alarm = (new Date()).getTime();
-
if(alarm - start > time){ break; }
-
}
-
}
W tej wersji funkcja sleep ma na celu zapętlić się dopóki nie minie określona liczba sekund - nie muszę chyba mówić, że zjada to czas procesora. Druga natomiast (ta z tych “lepszych”) opiera się na wykorzystaniu synchronicznego zapytania Ajax - skutkiem ubocznym jest obciążanie serwera dodatkowym (i niepotrzebnym) zapytaniem oraz “zawieszanie” się przeglądarki.
Spójrzmy jednak co tak naprawdę chcemy osiągnąć - załóżmy, że nasz aktualny kod wygląda mniej więcej tak:
-
// Wykonaj kod 1
-
sleep(10); // Poczekaj 10 sekund
-
// Wykonaj kod 2
Wówczas zamiast korzystać z symulacji funkcji sleep/wait lepszym rozwiązaniem jest skorzystanie z funkcji setTimeout w następujący sposób:
-
function kod2() {
-
// Wykonaj kod 2
-
}
-
// Wykonaj kod 1
-
setTimeout("kod2()", 10000);//Poczekaj 10 sekund
-
// Tutaj nic nie rób
Dodatkowy komentarz jest chyba zbyteczny, jeżeli uważasz inaczej - zapraszam do komentowania :-).
Napisz komentarz