移动设备网络浏览器在线程睡眠方面是不是有任何标准? [关闭]
Posted
技术标签:
【中文标题】移动设备网络浏览器在线程睡眠方面是不是有任何标准? [关闭]【英文标题】:Are there any standards for mobile device web browsers in terms of thread sleeping? [closed]移动设备网络浏览器在线程睡眠方面是否有任何标准? [关闭] 【发布时间】:2012-05-31 04:12:46 【问题描述】:给定下面的jsFiddle,这是一个简单的递增计数器
http://jsfiddle.net/C93ms/6/
....如果我使用移动设备(智能手机或平板电脑)访问上面的 url,如果有 javascript 支持,计数器就会开始递增,如果我按下“主页”按钮,或单击电源按钮一次以关闭屏幕(但保持手机开机),然后脚本将停止运行并且计数器停止递增。我希望这会发生,并且我很欣赏保留电池寿命在移动设备上非常重要的原因,因此 UI 线程休眠或类似情况是有道理的。重新访问浏览器后,计数器会继续递增。在现实世界中,我假设使用 JavaScript 确定超时时间的网站不会超时,尽管处于非活动状态。
我还假设这会因设备、固件、甚至软件而异 - 我试图在这里确定是否存在标准方法或默认行为为此内置在移动开发框架中,以及设备行为方式的任何形式的一致性。
我不完全确定我在这里提出了一个好问题,但我一直在努力从 SO 中找到 100% 的相关信息,或者我不太清楚问题是什么我需要在搜索时询问。
【问题讨论】:
你要javascript框架还是手机sdks? @Bergi 没什么特别的,我可能问过一些人在这方面无法回答的问题。更多的是找出是否存在 JavaScript 的默认行为(框架驱动或其他) 您似乎将 Web 标准与操作系统的行为混为一谈。 ECMAscript 中可能没有任何内容说明是否允许操作系统停止浏览器的进程(它甚至提到浏览器吗?)——这与按下主键时发生的情况大致相同。没有管理这些东西的标准。通过点击 control z 并停止其进程,我可以很容易地在 C 程序中使计数器超时。然后应该在服务器端实现一个可靠的计数器,用户无法停止它。 @TomDignan 是的,很可能是真的。 (重新:将 x 与 y 混为一谈)-我意识到不会有任何书面的、独特的标准来管理这一点-我想我要问的问题归结为“移动设备是否以同样的方式行事”关于我'已经描述了。不过,可能没有人能真正回答这个问题! @TomDignan:setTimout 和 co。甚至不是 ECMAScript 标准的一部分。它们在Window
api 中定义。
【参考方案1】:
任何 JavaScript 框架都不能停止执行或改变底层 JS 引擎的行为。他们将无法影响setTimeout
。
然而,在WindowTimers
interface 上的当前 html5 草案中,该行为已标准化(这并不意味着它是这样实现的)。在那里你会找到注释:
此 API 不保证计时器将完全按计划运行。由于 CPU 负载、其他任务等导致的延迟是可以预料的。
而且,更明确地说:
9) (可选)等待用户代理定义的时间长度。
注意:这旨在允许用户代理根据需要填充超时,以优化设备的电源使用。例如,某些处理器具有低功耗模式,其中定时器的粒度会降低;在此类平台上,用户代理可以减慢计时器以适应此时间表,而不是要求处理器使用更精确的模式以及相关的更高功耗。
您也可以在桌面浏览器上看到这种行为,它实现了 4 毫秒的最小超时(阅读explanation on MDN)。因此,每个设备/软件/固件只要认为有必要就停止此类执行是合法的。
您可能还想看看WindowAnimationTiming
draft。
如果您确实在动画/时钟/等中使用setInterval
/setTimeout
,请始终使用Date
objects(例如通过Date.now()
)测量实际经过的时间。
【讨论】:
+1 - 感谢您为此提供的信息和努力。以上是关于移动设备网络浏览器在线程睡眠方面是不是有任何标准? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如果用户没有响应,qt 中是不是有任何 api 或方法可以在特定时间后将设备置于睡眠模式?
当移动设备处于睡眠模式或浏览器处于后台时,如何使用 Web 应用程序在移动浏览器中使用 HTML Geolocation API 获取位置?