https://mp.weixin.qq.com/s/QPNgEkee8x1HcIdNmushRw
页面浏览器开始卸载页面并对其内存清理时,该页面就进入终止状态。在此状态下,不会执行任何新任务[3],同时正在处理中的任务如果运行时间过长可能会被杀死。
简单来说,浏览器的设计是基于这样的假设:只要页面关闭时,后台队列中的任何进程都不需要再继续执行。
是使用 keep-alive 标志的 fetch,还是用 sendBeacon 来发送页面终止时的请求肯定需要权衡。以下建议或许可以帮助你在不同情况下做出正确的选择:
- 以下情况可以选择 fetch() + keepalive:
你需要简单的发送自定义 headers 的请求
你需要使用 GET 而非 POST
你需要兼容老旧的浏览器(例如 IE),并已经有了一个 fetch 方法的 polyfill - 以下情况使用 sendBeacon() 或许更好:
你只需要发送一个简单的服务请求,而不需要太多的定制化
你喜欢更简约更优雅的代码方式
你需要保证该请求不会和其他更重要的请求竞争资源