Chrome: timeouts/interval suspended in background tabs? Chrome: timeouts/interval suspended in background tabs? google-chrome google-chrome

Chrome: timeouts/interval suspended in background tabs?


I recently asked about this and it is behaviour by design. When a tab is inactive, only at a maximum of once per second the function is called. Here is the code change.

Perhaps this will help:How can I make setInterval also work when a tab is inactive in Chrome?

TL;DR: use Web Workers.


There is a solution to use Web Workers, because they run in separate process and are not slowed down

I've written a tiny script that can be used without changes to your code - it simply overrides functions setTimeout, clearTimeout, setInterval, clearInterval

Just include it before all your code

http://github.com/turuslan/HackTimer


Playing an ~empty sound forces the browser to retain the performance - I discovered it after reading this comment: How to make JavaScript run at normal speed in Chrome even when tab is not active?

I need unlimited performance on-demand for a browser game that uses WebSockets, so I know from experience that using WebSockets doesn't ensure unlimited performance, but from tests, playing an audio file seems to ensure it

Here's 2 empty audio loops I created for this purpose, you can use them freely, commercially:http://adventure.land/sounds/loops/empty_loop_for_js_performance.ogghttp://adventure.land/sounds/loops/empty_loop_for_js_performance.wav

(They include -58db noise, -60db doesn't work)

I play them, on user-demand, with Howler.js: https://github.com/goldfire/howler.js

function performance_trick(){    if(sounds.empty) return sounds.empty.play();    sounds.empty = new Howl({        src: ['/sounds/loops/empty_loop_for_js_performance.ogg','/sounds/loops/empty_loop_for_js_performance.wav'],        volume:0.5,        autoplay: true, loop: true,    });}

It's sad that there is no built-in method to turn full javascript performance on/off by default, yet, crypto miners can hijack all your computing threads using Web Workers without any prompt :|