Gregg Tavares schrieb:
I was wondering if there as been a proposal for either an optional
argument to setInterval that makes it only callback if the window is
visible OR maybe a window.setRenderInterval.
Here's the issue that seems like it needs to be solved.
Currently, AFAIK, the only way to do animation in HTML5 + JavaScript is
using setInterval. That's great but it has the problem that even when
the window is minimized or the page is not the front tab, JavaScript has
no way to know to stop animating. So, for a CPU heavy animation using
canvas 2d or canvas 3d, even a hidden tab uses lots of CPU. Of course
the browser does not copy the bits from the canvas to the window but
JavaScript is still drawing hundreds of thousands of pixels to the
canvas's internal image buffer through canvas commands.
[...]
There are probably other possible solutions to this problem but it seems
like the easiest would be either
*) adding an option to window.setInterval or only callback if the window
is visible
*) adding window.setIntervalIfVisible (same as the previous option really)
A possibly better solution would be
*) element.setIntervalIfVisible
Which would only call the callback if that particular element is visible.
From a performance point of view it might even be worth thinking about
the contrary: Allow UAs to stop the execution of scripts on non-visible
windows or elements by default, and provide a method to explicitly
specify if the execution of a script must not be stopped.
If you provide methods to check the visibility of a window or element,
you leave it up to the author to use them or not. I think performance
issues should rather be up to the UA.