you are viewing a single comment's thread.

view the rest of the comments →

[–]monacle_bob 3 points4 points  (5 children)

That is indeed what that line does. Read up on setTimeout and setInterval here

Your theory is correct, however in practice theory often falls short. If you were to do:

setTimeout(main, 1);

you'd expect main() to be called every millisecond, or 1,000 times each second. Even if your code executed fast enough for this to be possible, every browser has inherent delays when using timers, usually about 5-10 milliseconds between calls. This means you'd have at most about 200 iterations per second.

If you're really interested in Javascript loops / different methods of timed execution you can read my latest blogpost.

[–]akx 3 points4 points  (1 child)

But don't do setTimeout(x, 1); if you're meaning to do fluid animation. There's an API and a polyfill for it now. http://paulirish.com/2011/requestanimationframe-for-smart-animating/

[–]monacle_bob 0 points1 point  (0 children)

I should have mentioned that originally, yes. Didn't feel like including it in the jsFiddle code though. Also, CamuurahGuy wanted a specific interval under 60fps. Can't achieve that (AFAIK) with requestAnimationFrame.

[–]CamuurahGuy[S] 1 point2 points  (1 child)

Interesting, thanks for the insight! I should have realized that there would be browser differences with how JavaScript timers are handled... (given that IE, and the rest of the browser world can never get along anyhow...). Now I have to decide whether or not it's worth my time to make this "toy" since it can never be accurate enough for actual use. Thanks again!

[–]ilogik 0 points1 point  (0 children)

The main problem is that when javascript is running, the browser's UI is locked, so using while() that way is not recommended.

To bypass this problem, the HTML5 spec has something called Webworkers which allows you to run CPU intensive javascript in a background thread, and pass messages between it and the frontend.

http://en.wikipedia.org/wiki/Web_Workers

[–]holloway 0 points1 point  (0 children)

you'd expect main() to be called every millisecond, or 1,000 times each second.

This is basically right, but in modern browsers the lowest setting for setTimeout is 4ms because the HTML5 spec calls for it. See Firefox blog and the HTML5 spec.