开发者社区> 问答> 正文

为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?#前端面试

为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?

展开
收起
Bill 2020-05-23 13:52:49 3597 0
1 条回答
写回答
取消 提交回答
  • 领取2折优惠劵,有几率免单哦!http://www.weilai.info/tool/326.html

    英文术语叫:image beacon 在Google 的 Make the Web Faster 的 #Track web traffic in the background 中有提到。 主要应用于只需要向服务器发送数据(日志数据)的场合,且无需服务器有消息体回应。比如收集访问者的统计信息。

    一般做法是服务器用一个1x1的gif图片来作为响应,当然这有点浪费服务器资源。因此用header来响应比较合适,目前比较合适的做法是服务器发送"204 No Content",即“服务器成功处理了请求,但不需要返回任何实体内容”。

    另外该脚本的位置一般放在页面最后以免阻塞页面渲染,并且一般情况下也不需要append到DOM中。通过它的onerror和onload事件来检测发送状态。

    <script type="text/javascript">
     var thisPage = location.href;
     var referringPage = (document.referrer) ? document.referrer : "none";
     var beacon = new Image();
     beacon.src = "http://www.example.com/logger/beacon.gif?page=" + encodeURI(thisPage)
     + "&ref=" + encodeURI(referringPage);
    </script>
    
    • 能够完成整个 HTTP 请求+响应(尽管不需要响应内容)
    • 触发 GET 请求之后不需要获取和处理数据、服务器也不需要发送数据
    • 跨域友好
    • 执行过程无阻塞
    • 相比 XMLHttpRequest 对象发送 GET 请求,性能上更好
    • GIF的最低合法体积最小(最小的BMP文件需要74个字节,PNG需要67个字节,而合法的GIF,只需要43个字节)
    2020-05-24 11:49:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Vue.js 在前端服务化上的探索与实践 立即下载
阿里文娱大前端技术实践 立即下载
前端代码是怎样智能生成的 立即下载