You might have heard that setInterval is bad. The reason is that setInterval keeps on calling itself irrespective of whether or not the callback function completed.
Well, one can mimic the setInterval using setTimeout in combination with self-invoking functions. Here is an example: http://jsbin.com/usali4 Code Used: (function foo(){ alert('I will get called on page load and after 10 seconds again and again without setInterval :)'); setTimeout(foo, 10000); })() I had written an article on the subject that can be viewed here: http://webupon.com/audio/javascript-self-executing-functions-2/ On Jan 14, 10:28 am, foldi <[email protected]> wrote: > I'm trying to understand something about setInterval. When running the > following in FF3, the time it takes to execute the interval's function > does not take longer than the 30ms specified for the interval. > However, it takes longer than 30ms to for the interval to run again. > Where is the extra time going? Is there always some overhead to > running a setInterval? Thanks. > > Test = {}; > Test.end_repeat = 0; > Test.total = 0; > > Test.my_interval = setInterval(function () { > Test.repeat(); > > }, 30); > > Test.repeat = function () { > > var t; > > Test.start_repeat = new Date().getTime(); > > if (Test.end_repeat != 0) { > t = Test.start_repeat - Test.end_repeat; > console.log("/////"); > console.log("Repeat duration: " + t + "ms"); > } > > Test.end_repeat = new Date().getTime(); > > // > > Test.action_start = new Date().getTime(); > > for (var i = 0; i < 35000; i++) { // do something for a while; should > not take longer than 30ms, if so, decrease loop > t = new Date().getTime(); > } > > t = new Date().getTime() - Test.action_start; > console.log("Action duration: " + t + "ms"); > > if (Test.total++ > 10) { > clearInterval(Test.my_interval); > } > > } -- To view archived discussions from the original JSMentors Mailman list: http://www.mail-archive.com/[email protected]/ To search via a non-Google archive, visit here: http://www.mail-archive.com/[email protected]/ To unsubscribe from this group, send email to [email protected]
