我有定期执行活动的JavaScript.当用户没有看到该站点时(即窗口或选项卡没有焦点),最好不要运行.
有没有办法使用JavaScript?
我的参考点:如果您使用的窗口未处于活动状态,则Gmail聊天会播放声音.
我正在测试setTimeout使用此测试的准确性.现在我注意到(正如预期的那样)setTimeout并不是非常准确,但对于大多数设备并不是非常不准确.现在,如果我在Chrome中运行测试并让它在后台标签中运行(那么,切换到另一个标签并在那里浏览),返回测试并检查结果(如果测试完成),它们会发生显着变化.看起来超时运行速度慢得多.在FF4或IE9中测试没有发生这种情况.
因此,看起来Chrome暂停或至少减慢了无法关注的标签中的javascript执行速度.关于这个问题在网上找不到多少.这意味着我们无法运行后台任务,例如使用XHR调用定期检查服务器,并且setInterval(我怀疑看到相同的行为setInterval,如果有时间,我会编写测试).
有没有遇到过这个?这种暂停/减速会有解决方法吗?你会把它称为一个错误,我应该这样提交吗?
我注意到我的网络应用存在问题 - 当Chrome激活标签未设置为我的应用时,Chrome会停止运行我的JS代码,直到我再次打开标签.
我想它可以节省CPU周期.否则,如果您打开了20个选项卡并且每个选项卡都运行了代码,那么它将很快变慢.
这一切都很好,但我的应用程序要求它继续在后台运行.它可以实时更新图形并每隔几秒钟分析一次数据.
如果我移动到另一个选项卡,图形更新和分析停止(或变得非常慢 - 1秒现在像20秒).然后,当我再次关注制表符时,它恢复正常速度的更新,但由于这种奇怪的时间稀释,图形和数据分析变得奇怪.
我写了一个简单的jquery滑块,基本上可以通过3个div,隐藏一个然后淡入下一个等等使用 setInterval()
滑块适用于我的目的,但当我打开其他选项卡然后返回页面的选项卡时,所有div都可见,然后它们开始消失并再次开始工作.
这是我的jquery,里面是$(function(){}):
$('#slideshow-next').click(function() {
pauseSlideshow();
nextSlide();
});
$('#slideshow-prev').click(function() {
pauseSlideshow();
prevSlide();
});
$('#slideshow-pause').click(function(){
pauseSlideshow();
});
$('#slideshow-play').click(function() {
playSlideshow();
});
interval = setInterval('nextSlide()', 4000);
});
function playSlideshow() {
interval = setInterval('nextSlide()', 4000);
$('#slideshow-play').hide();
$('#slideshow-pause').show();
nextSlide();
}
function pauseSlideshow() {
interval = clearInterval(interval);
$('#slideshow-pause').hide();
$('#slideshow-play').show();
}
function nextSlide() {
//hide current slide
$('#slide'+currentSlide).hide();
// show next slide
var next = (currentSlide+1)%3;
$('#slide'+next).fadeIn('slow');
currentSlide = next;
}
function prevSlide() {
//hide current slide
$('#slide'+currentSlide).hide();
// show next slide
var …Run Code Online (Sandbox Code Playgroud)