页面卸载期间的JavaScript事件循环

时间:2015-03-22 13:38:56

标签: javascript mobile-browser onunload

我提供第三方JavaScript代码,该代码使用与网页上发生的事件相关的消息更新服务器。消息排队直到达到某个缓冲区大小,然后从队列中刷新并通过AJAX调用发送。当我检测到页面卸载时,我会刷新队列中剩余的消息。

我的问题是,有时服务器不会收到在客户端排队的最后一批邮件。这个问题在移动浏览器上肯定更常见,在Safari上比在Chrome上更常见(不确定),当表单提交导致卸载时,这种情况更常发生。

我的猜测是,在某个任意点,浏览器会停止JavaScript执行而不管待处理的排队事件和/或忽略正在执行的堆栈。由于消息是异步发送的,我假设发送堆栈从未被调用过,或者在达到AJAX调用之前停止。

即使在同一台计算机和Web应用程序上进行测试,这个问题似乎仍然存在,这意味着瞬间处理器负载会发挥作用。

我的问题是:

  1. 卸载期间浏览器何时停止执行JavaScript?

  2. 执行堆栈是否可以保证在卸载期间运行直到完成?

  3. 如果浏览器确实任意削减执行,有什么办法 推迟吗?

  4. 是否还有其他方法可以确保在卸载页面之前执行所有排队的事件?

  5. 有没有办法查询事件队列的状态?

1 个答案:

答案 0 :(得分:0)

你的问题:

1)随时

2)没有。

3)不,完全没有。

4)不是在这个时刻,必须在此之前完成并且必须在卸载时完成。

5)什么事件队列?