给出以下jsFiddle,这是一个简单的递增计数器
....如果我使用移动设备(智能手机或平板电脑为了参数)访问上面的网址,计数器开始按照您的预期递增,前提是有JavaScript支持,那么看来如果我按“主页”按钮,或单击电源按钮一次关闭屏幕(但保持手机开机)然后脚本将停止运行,计数器停止递增。我期待这种情况发生,并且我理解为什么在移动设备上保留电池寿命非常重要的原因,因此UI线程睡眠或类似情况是有道理的。重新访问浏览器后,计数器将继续递增。在现实世界中,使用JavaScript确定超时时间的网站在不活动期间不会超时,我假设。
我也假设这会因设备,固件,软件而异 - 我尝试确定这里是否有标准方法或默认行为内置于移动开发框架中,以及设备行为的任何形式的一致性。
我不完全确定我在这里问过好问题,但我很难从SO中找到100%的相关信息,或者我不太清楚问题是什么我在搜索时需要问。
由于
答案 0 :(得分:6)
没有JavaScript框架可以停止执行或更改底层JS引擎的行为。他们将无法影响setTimeout
。
然而,行为在WindowTimers
interface的当前HTML5草案中是标准化的(这并不意味着它是这样实现的)。你会在那里找到说明:
此API不保证计时器将按计划运行。由于CPU负载,其他任务等原因导致延迟。
,甚至更明确:
9)(可选)等待用户代理定义的另一段时间。
注意:这旨在允许用户代理根据需要填充超时,以优化设备的电源使用。例如,一些处理器具有低功耗模式,其中定时器的粒度减小;在这样的平台上,用户代理可以降低定时器的速度以适应此计划,而不是要求处理器使用更准确的模式及其相关的更高功耗。
您也可以在桌面浏览器上看到此类行为,这些浏览器的最小超时时间为4毫秒(读取explanation on MDN)。因此,如果他们只认为有必要,那么每个设备/软件/固件停止执行都是合法的。
您可能还想查看WindowAnimationTiming
draft。
如果您在动画/时钟/等中使用setInterval
/ setTimeout
,请始终使用Date
objects(例如通过Date.now()
)测量实际经过的时间。