6

给定以下 jsFiddle,这是一个简单的递增计数器

http://jsfiddle.net/C93ms/6/

....如果我使用移动设备(为了争论而使用智能手机或平板电脑)访问上面的 url,如果有 JavaScript 支持,计数器会按照您的预期开始递增,然后看起来如果我按下“主页"按钮,或单击电源按钮一次关闭屏幕(但保持手机开机),然后脚本将停止运行并且计数器停止递增。我希望这会发生,并且我很欣赏保留电池寿命在移动设备上非常重要的原因,因此 UI 线程休眠或类似情况是有道理的。重新访问浏览器后,计数器会继续递增。在现实世界中,我假设使用 JavaScript 确定超时时间的网站不会超时,尽管处于非活动状态。

我还假设这会因设备、固件、甚至软件而异——我在这里试图确定的是移动开发框架中是否有标准方法默认行为,以及在如何实现的任何形式的一致性。设备的行为。

我不完全确定我在这里问了一个好问题,但是我一直在努力从 SO 中找到 100% 的相关信息,或者我不太清楚在搜索时我需要问什么问题。

4

1 回答 1

10

没有任何 JavaScript 框架可以停止执行或改变底层 JS 引擎的行为。他们将无法影响setTimeout

然而,该行为在当前的 HTML5 草案中已在WindowTimers界面上标准化(这并不意味着它是这样实现的)。在那里你会找到注释:

此 API 不保证计时器将完全按计划运行。由于 CPU 负载、其他任务等导致的延迟是可以预料的。

而且,更明确:

9) 可选地,等待用户代理定义的时间长度。

注意:这旨在允许用户代理根据需要填充超时以优化设备的电源使用。例如,某些处理器具有低功耗模式,其中定时器的粒度会降低;在这样的平台上,用户代理可以减慢计时器以适应这个时间表,而不是要求处理器使用更精确的模式以及相关的更高的功耗。

你也可以在桌面浏览器上看到这样的行为,它实现了 4 毫秒的最小超时(阅读MDN 上的解释)。因此,每个设备/软件/固件只要认为有必要就停止此类执行是合法的。

您可能还想看看WindowAnimationTiming草稿

如果您确实在动画/时钟/等中使用setInterval/ ,请始终使用对象(例如 via )测量实际经过的时间。setTimeoutDateDate.now()

于 2012-05-24T15:27:09.057 回答