Angular - 在后台标签中运行重复的任务?

时间:2017-11-16 22:23:42

标签: javascript angular websocket

我有一个Angular webapp,可以打开我的服务器的websocket,服务器每秒都会向应用程序发送一个新的数据包。当应用程序中的websocket收到消息时,我会进行一些小的处理,然后在绘图中向用户显示数据。

当我更改标签时,似乎我的处理继续每秒发生一次,直到标签在后台时已经过了大约10分钟。然后,我的应用程序锁定。如果我将它留在前台,它最终会“回收”并每秒多次运行我的处理程序 - 就像函数调用排队一样。

这种行为似乎与Linux和Mac上的Chrome和Safari都一致。

有谁知道这里发生了什么?为什么后台处理会在一段时间后突然改变?

1 个答案:

答案 0 :(得分:0)

这是最近的一项改变,旨在减少电池消耗。遗憾的是没有真正的退出,如果你的应用程序在后台运行,它将受到限制。有关article的更多详细信息,请详细说明Google开发者门户网站。

  

在Chrome 57中运送,基于预算的计时器限制是计时器对齐机制的进一步扩展,对后台计时器CPU使用量进行了额外限制。它的运作如下:

     
      
  • 每个后台标签都有一个时间预算(以秒为单位),用于在后台运行计时器。
  •   
  • 页面在后台10秒后会受到时间预算限制。
  •   
  • 只有在时间预算为非负时,才允许计时器任务运行。
  •   
  • 执行计时器后,从预算中减去其运行时间。   预算不断随时间再生(目前设定为每秒0.01秒的速率)。请注意,当Chrome收集有关限制行为的更多数据时,可以调整此预算重新生成率。
  •   
     

这种限制有许多自动豁免:

     
      
  • 播放音频的应用程序被视为前景,不受限制。
  •   
  • 具有实时连接的应用程序(WebSockets和WebRTC),以避免超时关闭这些连接。在这些情况下,仍然应用运行时间 - 每秒一次的规则。
  •   

您受影响的特定规则是:

  

具有实时连接的应用程序(WebSockets和WebRTC),以避免超时关闭这些连接。在这些情况下,仍然会应用运行时间 - 每秒一次的规则。