美文网首页
Navigator.sendBeacon 无阻塞发送统计数据

Navigator.sendBeacon 无阻塞发送统计数据

作者: 一个健康马 | 来源:发表于2022-03-22 17:20 被阅读0次

场景:前端埋点,网页刷新或者关闭的时候调用异步请求

常规方案

  1. 直接发送 xhr 请求
    我们会优先想到监听页面的unload或者beforeunload事件,在事件回调里使用XMLHttpRequest发送异步请求。
    但是由于是xhr请求是异步发送,很可能在它即将发送的时候,页面已经卸载了,从而导致发送取消或者发送失败。异步请求响应返回后,由于页面和相关资源已经卸载,会引起function not found的错误,
    导致数据统计有错

Navigator.sendBeacon()

浏览器引入的sendBeacon方法,发出的是异步请求,但是请求是作为浏览器任务执行的,与当前页面是脱钩的。因此该方法不会阻塞页面卸载流程和延迟后面页面的加载

基本用法

navigator.sendBeacon(url, data);//true||false

url 就是上报地址,data 可以是 ArrayBufferView,Blob,DOMString 或 Formdata

sendBeacon 如果成功进入浏览器的发送队列后,会返回true;如果受到队列总数、数据大小的限制后,会返回false。返回ture后,只是表示进入了发送队列,浏览器会尽力保证发送成功,但是否成功了,无法判断。

sendBeacon方法具有如下特点:

1.发出的是异步请求,并且是POST请求,后端解析参数时,需要注意处理方式;
2.发出的请求,是放到的浏览器任务队列执行的,脱离了当前页面,所以不会阻塞当前页面的卸载和后面页面3.的加载过程,用户体验较好;
4.只能判断出是否放入浏览器任务队列,不能判断是否发送成功;
5.Beacon API不提供相应的回调,因此后端返回最好省略response body

传json的写法

//例
let data={
a:"测",
b:"试"
}
//创建blob对象,并设置请求头
const blob = new Blob([JSON.stringify(data)], {
    type: 'application/json; charset=UTF-8',
  });
//调用接口,并传送数据
navigator.sendBeacon(url, blob);

效果同下面axios方法一样

axios.post(url,data)

相关文章

  • Navigator.sendBeacon 无阻塞发送统计数据

    业务场景 当用户关闭浏览器、刷新浏览器或者跳转其他页面时,向服务器发送一些统计数据。 常规方案 1. 直接发送 x...

  • Navigator.sendBeacon 无阻塞发送统计数据

    场景:前端埋点,网页刷新或者关闭的时候调用异步请求 常规方案 直接发送 xhr 请求我们会优先想到监听页面的unl...

  • Navigator.sendBeacon()---统计数据发送到

    navigator.sendBeacon() 方法可用于通过 HTTP POST[https://develope...

  • 类似埋点比较少用的知识点

    埋点 可异步发送信息返回布尔值navigator.sendBeacon(url, data);详见: https:...

  • Golang并发:无阻塞通道读写

    阻塞场景无论是有缓存通道、无缓冲通道都存在阻塞的情况。无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它...

  • 【JAVA】总结四

    阻塞IO和非阻塞IO 发送端往缓冲区写入数据,当发送端缓冲区数据满了,发送端write就会阻塞,接收端从接收端缓冲...

  • ActiveMQ的高级特性

    1 异步投递与确认签收回调 同步发送:会阻塞producer的send方法。 异步发送:不会阻塞producer的...

  • Go基础语法(十)

    缓冲信道 之前看到的都是无缓冲信道,无缓冲信道的发送和接收过程是阻塞的。我们还可以创建一个有缓冲(Buffer)的...

  • Go语言channel备忘录

    目录 无缓冲channel等价于缓冲大小为0的channel,而不是1 发送者和接收者哪些情况会阻塞 close哪...

  • 基本样例

    基本样例生产者有三种模式 异步发送 同步发送 单项发送同步发送,当消息发送的时,代码会阻塞知道borker返回信息...

网友评论

      本文标题:Navigator.sendBeacon 无阻塞发送统计数据

      本文链接:https://www.haomeiwen.com/subject/udgfjrtx.html