我提供第三方JavaScript代码,该代码使用与网页上发生的事件相关的消息更新服务器。消息排队直到达到某个缓冲区大小,然后从队列中刷新并通过AJAX调用发送。当我检测到页面卸载时,我会刷新队列中剩余的消息。
我的问题是,有时服务器不会收到在客户端排队的最后一批邮件。这个问题在移动浏览器上肯定更常见,在Safari上比在Chrome上更常见(不确定),当表单提交导致卸载时,这种情况更常发生。
我的猜测是,在某个任意点,浏览器会停止JavaScript执行而不管待处理的排队事件和/或忽略正在执行的堆栈。由于消息是异步发送的,我假设发送堆栈从未被调用过,或者在达到AJAX调用之前停止。
即使在同一台计算机和Web应用程序上进行测试,这个问题似乎仍然存在,这意味着瞬间处理器负载会发挥作用。
我的问题是:
卸载期间浏览器何时停止执行JavaScript?
执行堆栈是否可以保证在卸载期间运行直到完成?
如果浏览器确实任意削减执行,有什么办法 推迟吗?
是否还有其他方法可以确保在卸载页面之前执行所有排队的事件?
有没有办法查询事件队列的状态?
答案 0 :(得分:0)
你的问题:
1)随时
2)没有。
3)不,完全没有。
4)不是在这个时刻,必须在此之前完成并且必须在卸载时完成。
5)什么事件队列?