Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
$ = jQuery
TIMEOUT = 20000
lastTime = (new Date()).getTime()
setInterval ->
currentTime = (new Date()).getTime()
# If timeout was paused (ignoring small
# variations) then trigger the 'wake' event
if currentTime > (lastTime + TIMEOUT + 2000)
$(document).wake()
lastTime = currentTime
, TIMEOUT
$.fn.wake = (callback) ->
if typeof callback is 'function'
$(this).on('wake', callback)
else
$(this).trigger('wake', arguments...)
(function($){
var TIMEOUT = 20000;
var lastTime = (new Date()).getTime();
setInterval(function() {
var currentTime = (new Date()).getTime();
if (currentTime > (lastTime + TIMEOUT + 2000)) {
$(document).wake();
}
lastTime = currentTime;
}, TIMEOUT);
$.fn.wake = function(callback) {
if (typeof callback === 'function') {
return $(this).on('wake', callback);
} else {
return $(this).trigger('wake');
}
};
})(jQuery);
@acdha

Date.now might be preferable to churning Date instances. It's probably advisable to cache $(document) as well, although it's not called anywhere near as frequently.

I generally also prefer to simplify the math to avoid needing to repeat part of the calculation and bury the slop factor down in the implementation:

var maxDelta = Math.floor(TIMEOUT * 1.1);
…
if (currentTime - lastTime > maxDelta) {
…
@guidobouman

Good point on the Date.now case: http://jsperf.com/date-now-vs-date-gettime

I prefer the currentTime > (lastTime + TIMEOUT + 2000) notation though. Much more readable.

@rbrcurtis

Apparently many browsers will pause setInterval when the browser window isn't focused, whichmeans this will trigger wake any time you focus another window for more than ~22 seconds. or am I misunderstanding something?

http://www.goat1000.com/2011/03/23/how-accurate-is-window.setinterval.html

@vinnymac

It appears that some do. Chrome/Firefox limit the setInterval time to around 1000 ms. IE/Safari/Opera have no restrictions. However, according to this that may not be true on iOS. For a more in depth explanation read this StackOverflow Post.

WakeUp is a jQuery library that does the same thing. I recommend combining this with the changes recommended by acdha above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.