最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端JS日志采集的幾種方式盤點(diǎn)

 更新時(shí)間:2025年05月20日 10:10:35   作者:獨(dú)立開(kāi)閥者_(dá)FwtCoder  
前端日志采集,說(shuō)簡(jiǎn)單也簡(jiǎn)單,說(shuō)復(fù)雜也復(fù)雜,取決于業(yè)務(wù)想要什么粒度的數(shù)據(jù),以及開(kāi)發(fā)者能接受多少侵入性、延遲和兼容性問(wèn)題,今天我們就來(lái)盤一盤常見(jiàn)的幾種前端上報(bào)方式,以及各自的優(yōu)劣勢(shì)和適用場(chǎng)景,需要的朋友可以參考下

1. + GIF / Pixel 上報(bào)

原理:   通過(guò)在頁(yè)面上動(dòng)態(tài)創(chuàng)建一個(gè)Image對(duì)象,把要上報(bào)的數(shù)據(jù)編碼到請(qǐng)求 URL 的 query 參數(shù)中,然后加載一個(gè) 1x1 的透明 GIF 圖片(當(dāng)然不需要真的返回一張圖,后端 204 也行),重點(diǎn)是通過(guò)src請(qǐng)求資源的同時(shí),讓服務(wù)端記錄.gif后的數(shù)據(jù)。

代碼示例:

const img = new Image();
img.src = `https://logserver.com/collect?event=click&userId=123`;

優(yōu)點(diǎn):

  • 兼容性超好,從古早 IE 到現(xiàn)代瀏覽器都能用。
  • 不受 CORS 限制,因?yàn)?strong>圖片加載天然跨域。
  • 簡(jiǎn)單,幾乎不會(huì)影響頁(yè)面性能。

缺點(diǎn):

  • 請(qǐng)求量小,受 URL 長(zhǎng)度限制(一般 2KB 左右)。
  • 只能 GET,不能 POST。
  • 無(wú)法拿到發(fā)送成功或失敗的準(zhǔn)確回調(diào)。

適用場(chǎng)景:

  • 簡(jiǎn)單 PV/UV 打點(diǎn),曝光上報(bào)。
  • 無(wú)需保證必達(dá),只要發(fā)出請(qǐng)求就行。

2. fetch / XMLHttpRequest 上報(bào)

原理:   使用fetch或者XMLHttpRequest直接發(fā) HTTP 請(qǐng)求,數(shù)據(jù)格式可以是 JSON 或表單數(shù)據(jù),GET/POST 都行。

代碼示例:

js
 體驗(yàn)AI代碼助手
 代碼解讀
復(fù)制代碼
// fetch版
fetch('https://logserver.com/collect', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ event: 'click', userId: 123 })
});

優(yōu)點(diǎn):

  • 可以 POST,支持大體積數(shù)據(jù)。
  • 可以拿到請(qǐng)求成功或失敗的反饋。
  • 靈活,能帶復(fù)雜頭部,比如認(rèn)證信息。

缺點(diǎn):

  • 受 CORS 限制,需要服務(wù)器支持。
  • 發(fā)送過(guò)程中可能阻塞主線程,尤其是同步 XHR。
  • 如果頁(yè)面關(guān)閉得太快,可能請(qǐng)求還沒(méi)發(fā)出去(不過(guò)可以用keepalive選項(xiàng)優(yōu)化)。

適用場(chǎng)景:

  • 錯(cuò)誤日志、性能埋點(diǎn)。
  • 需要可靠上報(bào)、需要認(rèn)證或者復(fù)雜參數(shù)時(shí)。

3. navigator.sendBeacon

原理:   專門為這種場(chǎng)景設(shè)計(jì)的 API,可以在頁(yè)面卸載(比如跳轉(zhuǎn)、關(guān)閉)時(shí),異步且可靠地把數(shù)據(jù)發(fā)送到服務(wù)器,不阻塞頁(yè)面卸載流程。

代碼示例:

navigator.sendBeacon('https://logserver.com/collect', JSON.stringify({ event: 'unload', userId: 123 }));

優(yōu)點(diǎn):

  • 適合頁(yè)面關(guān)閉前發(fā)送數(shù)據(jù),不容易丟包。
  • 不阻塞 unload 流程,不卡界面。
  • 支持 POST,發(fā)送簡(jiǎn)單。

缺點(diǎn):

  • 兼容性略差(但現(xiàn)在主流瀏覽器基本都支持了)。
  • 不支持自定義請(qǐng)求頭。
  • 只支持 Content-Type 是application/x-www-form-urlencodedtext/plain的請(qǐng)求體。

適用場(chǎng)景:

  • 頁(yè)面 unload 時(shí)的上報(bào),比如用戶行為日志、退出日志。

4. WebSocket 上報(bào)

原理:   建立長(zhǎng)連接,把日志實(shí)時(shí)推送到服務(wù)器。

優(yōu)點(diǎn):

  • 實(shí)時(shí)性超強(qiáng)。
  • 理論上吞吐量高,連接一旦建立數(shù)據(jù)傳輸非常輕量。

缺點(diǎn):

  • 建連、?;钣谐杀荆苿?dòng)端或弱網(wǎng)環(huán)境下容易掉線。
  • 服務(wù)端也要有能力管理大量持久連接。
  • 不適合小流量、輕量應(yīng)用。

適用場(chǎng)景:

  • 高實(shí)時(shí)要求的埋點(diǎn),比如游戲、IM、股票類應(yīng)用。

總結(jié)

方式優(yōu)勢(shì)劣勢(shì)常用場(chǎng)景
+ GIF簡(jiǎn)單兼容只能 GET,小數(shù)據(jù)量曝光打點(diǎn)
fetch/XHR靈活可靠受 CORS 限制錯(cuò)誤日志、性能上報(bào)
sendBeacon頁(yè)面關(guān)閉也能發(fā)兼容性略差,簡(jiǎn)單數(shù)據(jù)離開(kāi)頁(yè)面上報(bào)
WebSocket實(shí)時(shí)性強(qiáng)成本高游戲、IM 實(shí)時(shí)上報(bào)

實(shí)際開(kāi)發(fā)里,我們會(huì)根據(jù)業(yè)務(wù)場(chǎng)景,多種方式結(jié)合使用:普通打點(diǎn)用fetch,頁(yè)面 unload 用sendBeacon,曝光用Image兜底,再加一些重試機(jī)制,做到不丟、不卡、可靠。

以上就是前端JS日志采集的幾種方式盤點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于前端JS日志采集方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實(shí)現(xiàn)太極旋轉(zhuǎn)思路分析

    JS實(shí)現(xiàn)太極旋轉(zhuǎn)思路分析

    本文主要對(duì)JS實(shí)現(xiàn)太極旋轉(zhuǎn)的思路進(jìn)行分析,步驟清晰,簡(jiǎn)短的文字,深入的理解。需要的朋友可以看下
    2016-12-12
  • JavaScript下申明對(duì)象的幾種方法小結(jié)

    JavaScript下申明對(duì)象的幾種方法小結(jié)

    在JavaScript中可以用下面的幾種方法申明對(duì)象:(從"Truly"的文章中學(xué)到)
    2008-10-10
  • 小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn)

    小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn)

    這篇文章主要介紹了小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 基于JavaScript實(shí)現(xiàn)五子棋游戲

    基于JavaScript實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 小程序開(kāi)發(fā)基礎(chǔ)之view視圖容器

    小程序開(kāi)發(fā)基礎(chǔ)之view視圖容器

    這篇文章主要介紹了小程序開(kāi)發(fā)基礎(chǔ)之view視圖容器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • javascript prototype原型操作筆記

    javascript prototype原型操作筆記

    在 JavaScript 中,prototype 不但能讓對(duì)象共享自己財(cái)富,而且 prototype 還有尋根問(wèn)祖的天性,從而使得先輩們的遺產(chǎn)可以代代相傳。
    2009-12-12
  • 取得元素的左和上偏移量的方法

    取得元素的左和上偏移量的方法

    利用offsetParent屬性在Dom層次中逐級(jí)向上回溯,將每個(gè)層次偏移量合計(jì),需要的朋友可以參考下
    2014-09-09
  • setTimeout與setInterval的區(qū)別淺析

    setTimeout與setInterval的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于setTimeout與setInterval區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • webpack打包進(jìn)度展示以及美化教程

    webpack打包進(jìn)度展示以及美化教程

    webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器(module bundler),下面這篇文章主要給大家介紹了關(guān)于webpack打包進(jìn)度展示以及美化的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01

最新評(píng)論

正定县| 深圳市| 墨玉县| 依安县| 宁晋县| 淮阳县| 达州市| 五家渠市| 成都市| 苗栗市| 天气| 辽源市| 乌拉特前旗| 万盛区| 兴义市| 江北区| 嘉善县| 绥芬河市| 广丰县| 磐安县| 咸丰县| 远安县| 仁布县| 拉萨市| 大邑县| 射阳县| 沽源县| 鱼台县| 漳平市| 朝阳市| 镇安县| 德州市| 宁强县| 鲁山县| 双桥区| 泽库县| 鹤峰县| 田林县| 瓦房店市| 灵宝市| 达尔|