On 11:59 AM, Boris Zbarsky wrote:

Nowadays the clamp is there because sites use |setTimeout(f, 0)| when they really mean "run this at 10Hz" and if you run it with no delay then they swamp your event loop and possible render "wrong" (e.g. the text disappears before the user has a chance to read it).
I'm not convinced that this is the meaning. I use |setTimeout(f, 0)| to mean "schedule f after this event completes" or "push |f| onto the event queue"; I think that is the common meaning. A delay value of zero is perfectly sensible, but we mean "zero seconds after other queued events", not "zero seconds after this event". We assume (without real evidence I suppose) that UI and IO events can be queued while our JS (the caller of |setTimeout(f, 0)|) runs.

The essential logic of |setTimeout(f, 0)| is cooperative multiprocessing yield: we believe that our current event processing could be long enough to interfere with user interaction and |f| can be delayed without serious impact on the UI. We have no reason to pick a value other than zero. If we want to give the user 3 seconds to read text we use 3000.

The "swamp the event loop" case is logically unrelated to this case, just like setInterval is unrelated. Multiple repeated calls to |setTimeout(f,0)| are bugs and setInterval of zero would be a bug. Of course the browser has to deal with theses cases, but the lower limit on setTimeout seems like crude solution.

jjb
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to