- From: David Bruant <bruant.d@gmail.com>
- Date: Tue, 13 Aug 2013 00:51:13 +0200
- To: public-web-perf@w3.org
Hi, I've been discussing setImmediate recently in various places and been told that here would be the most appropriate place [1], so here I am :-) I have read through the archives of this list and couldn't find all the answers to my questions/concerns. First off, something is not entirely clear to me. I've just been pointed out by John-David Dalton [2] to a page [3] that suggests that the current HTML5 "250 callbacks per second" is a madness that drains battery: "Browsers have attempted to increase the number of callbacks per second that JavaScript developers can receive through the setTimeout and setInterval API’s (...) preventing hardware from entering low power states." This suggests that running more callbacks per second is detrimental to battery On the other hand, setImmediate suggests that the callback should be run as fast as possible. It's also been said on this list [4] that Microsoft doesn't think setImmediate should be clamped (because that would result in less callbacks calls per seconds). Which one do we want for setImmediate? More or less callbacks per seconds? I would like to discuss the idea of clamping. Firefox [5] once had a case of a website doing in essence: (function f(){ setTimeout(f, 0); })(); And that would make the CPU go to 100%. Their response was to align to what other browsers were doing which was to reinterpret "0" as something a bit higher (10ms at the time). 10ms was later changed to 4ms and only for deeply-nested setTimeouts (so, setTimeout(f,0) really means 0 until you've done it 4 times in a row after which there is the minimum 4ms delay). The bug that was reported against Firefox, was found somewhere else too [6], so (function f(){ setTimeout(f, 0); })(); is something write. Not these exact characters, not intentionally, but they write it and, unclamped, that uses the CPU 100%. I would be interested to know what is expected to happen for (function f(){ setImmediate(f); })(); It's been suggested [4] that clamping is not an option. And that differentiates setImmediate from setTimeout. Now, Adam Barth suggested [6] that if a browser implements a clamping for setImmediate, then, websites with the (function f(){ setImmediate(f); })(); mistake would eat less battery in this browser and users would be incentivized to use it instead of non-setImmediate-clamping browsers. We all know that the natural consequence is all browsers moving to the clamping behavior, having to de facto standardize that behavior and effectively making setImmediate nothing but a setTimeout 0 equivalent. How can this situation be avoided? (given the current setImmediate spec, I can't see how) Thanks, David [1] https://twitter.com/getify/status/365800931176095746 [2] https://twitter.com/jdalton/status/367038319151955968 [3] http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html [4] http://lists.w3.org/Archives/Public/public-web-perf/2011Jul/0012.html [5] https://bugzilla.mozilla.org/show_bug.cgi?id=123273 [6] see [4] at the end of https://groups.google.com/a/chromium.org/d/msg/blink-dev/Hn3GxRLXmR0/XP9xcY_gBPQJ [7] https://groups.google.com/a/chromium.org/d/msg/blink-dev/Hn3GxRLXmR0/P9zOB1HIQ4IJ
Received on Monday, 12 August 2013 22:51:42 UTC