Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javascript setInterval

Tags:

javascript

a question. If i use setInterval in this manner:

setInterval('doSome();',60000);

am i safe that the doSome() function is triggered every 60 seconds, even if I change the tab in a browser?

like image 987
Omega Avatar asked Apr 27 '11 08:04

Omega


People also ask

What does setInterval do in JavaScript?

The setInterval() function is commonly used to set a delay for functions that are executed again and again, such as animations. You can cancel the interval using clearInterval() . If you wish to have your function called once after the specified delay, use setTimeout() .

What is difference between setTimeout and setInterval in JavaScript?

setTimeout allows us to run a function once after the interval of time. setInterval allows us to run a function repeatedly, starting after the interval of time, then repeating continuously at that interval.

How does the setInterval () function?

The setInterval() method calls a function at specified intervals (in milliseconds). The setInterval() method continues calling the function until clearInterval() is called, or the window is closed. 1 second = 1000 milliseconds.

What can I use instead of setInterval?

(function foo(){ // your code logic here setTimeout(foo, 5000); })(); The difference here is that it would work similar to setInterval but unlike it, the next call to function will be run only after your code logic here part has finished executing. See the DEMO here.


2 Answers

Passing a string to setInterval is fine, and is one of two ways to use setInterval, the other is passing a function pointer. It is not wrong in any way like the other answers state, but it is not as efficient (as the code must be reparsed) nor is it necessary for your purpose. Both

setInterval('doSome();', 60000); // this runs doSome from the global scope
                                 // in the global scope

and

setInterval(doSome, 60000);      // this runs doSome from the local scope
                                 // in the global scope

are correct, though they have a slightly different meaning. If doSome is local to some non-global scope, calling the latter from within the same scope will run the local doSome at 60000ms intervals. Calling the former code will always look for doSome in the global scope, and will fail if there is no doSome function in the global scope.

The function will reliably be triggered, regardless of tab focus, at intervals of at least 60000ms, but usually slightly more due to overheads and delays.

All browsers clamp the interval value to at least a certain value to avoid intervals being too frequent (I think it's a minimum of 10ms or 4ms or something, I can't exactly remember).

Note that some browsers (the upcoming Firefox 5 is one, but there are probably others that I don't know of) further clamp setInterval drastically to e.g. 1000ms if the tab is not focused. (Reference)

like image 80
Delan Azabani Avatar answered Oct 14 '22 11:10

Delan Azabani


No, the interval cannot execute until the event loop is cleared, so if you do for instance setInterval(func, 1000); for(;;) then the interval will never run. If other browsers tabs run in the same thread (as they do everywhere(?) except for in chrome, then the same applies if those tabs clog the event loop.)

But for an interval as large as 60000 it is at least very likely that the func will be called in reasonable time. But no guarantees.

like image 21
Adam Bergmark Avatar answered Oct 14 '22 12:10

Adam Bergmark