当前位置: 首页 > 知识库问答 >
问题:

SafariJavaScript setTimeout停止时最小化

鞠自明
2023-03-14

这与以下内容有关:
卡皮坦岛的Safari 9.1
塞拉山的Safari 10

当浏览器或选项卡失去焦点(主要是最小化)时,有人知道Safari在JavaScript引擎中对setTimeout()做了什么吗?

我创建了一个简单的JavaScript web应用程序,我在Safari中加载该应用程序,它调用JavaScript setTimeout(),并在超时值之后传递另一个要执行的函数。该函数将日期/时间打印到控制台,然后使用相同的超时值调用setTimeout()。

如果Safari选项卡失去焦点或浏览器最小化,经过一段时间后,Safari似乎停止执行setTimeout和后续要调用的函数,直到返回焦点,才会执行函数。这就像事件循环停止处理一样。

注意:不会丢失任何函数调用,它们只会暂停,并在浏览器恢复焦点时重新启动。

我在火狐、Chrome或IE11中没有注意到这一点。

提出这个问题的主要原因是,我维护的一个web应用程序使用CometD与服务器进行通信时,主要观察到了这个问题。CometD库使用setTimeout每30秒执行一次返回服务器的请求。如果运行应用程序的浏览器最小化,CometD似乎会停止与服务器的通信,直到浏览器再次最大化。

共有1个答案

江同化
2023-03-14

您可能应该改用setInterval,因为根据这个答案,setInterval仍然有效,即使它被限制为每秒1次。

WindowOrWorkerGlobalScope的setInterval()方法重复调用函数或执行代码片段,每次调用之间有固定的时间延迟。返回一个intervalID。

语法var intervalID=scope.setInterval(func,delay[,param1,param2,…]);var intervalID=范围.setInterval(代码,延迟);参数

每延迟毫秒执行的函数。

代码可选语法允许您包含字符串而不是函数,该函数每延迟毫秒编译和执行一次。不建议使用此语法,原因与使用ava()存在安全风险相同。

延迟时间,以毫秒(千分之一秒)为单位,计时器应在执行指定函数或代码之间延迟。如果此参数小于10,则使用值10。注意,实际延迟可能更长;有关示例,请参阅WindowOrWorkerGlobalScope.setTimeout()中的“延迟超过指定时间的原因”。

param1,…,paramN可选的附加参数,在计时器过期后传递给func指定的函数。

固定到的非活动选项卡中的超时

为了减少后台选项卡的负载(以及相关的电池使用),在非活动选项卡中,超时通常被限制为每秒不超过一次(1000毫秒)的触发频率。

 类似资料:
  • 问题内容: 我在Python 3.4上的Scipy模块中使用了minimum,具体是: 可以设置最大迭代次数(如上所述),但是有没有办法告诉最小化在给定的设置时间之后停止搜索解决方案?我查看了最小化的常规选项以及SLSQP求解器的特定选项,但无法解决。 谢谢 问题答案: 否。您可以做的是在一个单独的进程中启动优化器,跟踪其运行时间并在必要时终止它:

  • Firebase在大约一个小时后停止连接到数据库并停止工作。如果我退出并重新登录,它的工作原理很好。这是使用谷歌和Facebook登录(目前为Facebook)。 我已经登录了,大约一个小时后,出现了这个: W/PersistentConnection:pc_0-提供的身份验证凭据无效。这通常表示FirebaseApp实例未正确初始化。确保你的谷歌服务。json文件具有正确的firebase_ur

  • 问题内容: 我仍在学习Java,如果有人可以帮助我,我将非常高兴! 对不起,英语不好,我是西班牙人!我正在制作一个平铺游戏,该游戏使用了经典的“游戏循环”,该引擎以60fps的速度限制了引擎的速度。循环睡眠,然后调用repaint();。这样很好!但.. 问题在于,当调整JFrame的大小或使其最大化时,将调用repaint事件!例如,当JFrame最大化/调整大小时,游戏以10000fps的速度

  • motioncfp.java:

  • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

  • 我已经将带有html小程序标记的小程序启动迁移到带有小程序描述符的jnlp部署。 对于小程序解决方案,当浏览器窗口关闭时,java应用程序结束。 使用JNLP解决方案,当窗口关闭时,java应用程序不会停止。并引发异常: 非常感谢。