setTimeout是不可靠的Chrome在Android时,失去焦点-任何解决方案?

lnlaulya  于 2023-01-11  发布在  Android
关注(0)|答案(1)|浏览(202)

我有一个网络应用程序,基本上可以看作是一个消息系统-人们可以提交消息,其他人可以接收它。这一切都通过 AJAX 和Javascript前端与PHP后端交互。所有这些工作完全正常,没有问题。
我还实现了通知系统,当收到新消息时,会向桌面或Android应用程序发送推送通知。这也完全可以正常工作。
通知系统使用setTimeout来定期检查 AJAX 系统,但这正是交易中断问题出现的地方。
当脱离Android的焦点时,settimeout就变得完全不可靠--有时它会起作用,有时它根本不起作用,有时它会很晚。
为了解决这个问题,我把所有的东西都移到了一个支持工作者那里,因为我认为这将独立于浏览器的关注而工作,但这更糟糕--似乎它甚至比仅仅在浏览器上运行settimeout更不一致。
那么有没有什么方法可以纠正这一点呢?在支持者内部有没有一些特别的指示,我可以放进去,这样它就不会睡觉了?
谢谢您。

laik7k3q

laik7k3q1#

此API不保证定时器会完全按计划运行。由于CPU负载、其他任务等原因导致的延迟是可以预料到的,这可能会导致实际延迟比预期的要长。
您可以在MDN上阅读更多关于setTimeout延迟的信息以及延迟时间可能更长的原因。
如果你需要即时消息之类的功能,你应该研究一下体系结构和协议,像WebSockets这样的带有事件的东西更适合这个用例。

相关问题