我正在测试setTimeout使用此测试的准确性.现在我注意到(正如预期的那样)setTimeout并不是非常准确,但对于大多数设备并不是非常不准确.现在,如果我在Chrome中运行测试并让它在后台标签中运行(那么,切换到另一个标签并在那里浏览),返回测试并检查结果(如果测试完成),它们会发生显着变化.看起来超时运行速度慢得多.在FF4或IE9中测试没有发生这种情况.
因此,看起来Chrome暂停或至少减慢了无法关注的标签中的javascript执行速度.关于这个问题在网上找不到多少.这意味着我们无法运行后台任务,例如使用XHR调用定期检查服务器,并且setInterval(我怀疑看到相同的行为setInterval,如果有时间,我会编写测试).
有没有遇到过这个?这种暂停/减速会有解决方法吗?你会把它称为一个错误,我应该这样提交吗?
给出以下jsFiddle,这是一个简单的递增计数器
....如果我使用移动设备(智能手机或平板电脑为了争论)访问上面的网址,计数器开始按照您的预期递增,只要有JavaScript支持,那么看来如果我按"主页" "按钮,或单击电源按钮一次关闭屏幕(但保持手机开机),然后脚本将停止运行,计数器停止递增.我期待这种情况发生,并且我理解为什么在移动设备上保留电池寿命非常重要的原因,因此UI线程睡眠或类似情况是有道理的.重新访问浏览器后,计数器将继续递增.在现实世界中,我假设,尽管处于不活动期,但使用JavaScript确定超时时间的网站不会超时.
我也假设,这将因设备而异,通过固件,通过软件什-什么,我想在这里确定是是否有一个标准的方法或默认行为内置到手机的发展框架,这和如何在任何形式的一致性设备的行为.
我不完全确定我在这里问过一个好问题,但我很难从SO中找到100%的相关信息,或者我不太清楚在搜索时我需要问什么问题.
谢谢