移动设备网络浏览器在线程休眠方面是否有任何标准?

IT技术 javascript android ios mobile dom-events
2021-02-03 03:51:29

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

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

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

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

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

1个回答

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

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

此 API 不保证计时器将准确按计划运行。由于 CPU 负载、其他任务等导致的延迟是意料之中的。

而且,更明确的是:

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

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

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

您可能还想看看WindowAnimationTiming草稿

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

+1 - 感谢您为此提供的信息和努力。
2021-03-16 03:51:29