我刚刚为我的用例找到了一个很好的解决方案:
function getTime() {
return (new Date()).getTime();
}
var lastInterval = getTime();
function intervalHeartbeat() {
var now = getTime();
var diff = now - lastInterval;
var offBy = diff - 1000; // 1000 = the 1 second delay I was expecting
lastInterval = now;
if(offBy > 100) { // don't trigger on small stutters less than 100ms
console.log('interval heartbeat - off by ' + offBy + 'ms');
}
}
setInterval(intervalHeartbeat, 1000);
当屏幕关闭时(或 JS 因任何原因暂停),下一个间隔会延迟,直到 JS 执行恢复。在我的代码中,我可以按offBy
数量调整计时器并称之为好。
在快速测试中,这似乎在 Android 4.2.2 的浏览器和 iOS 6.1.3 的 Safari 上运行良好。