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

前端JS日志采集的幾種方式盤點

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

1. + GIF / Pixel 上報

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

代碼示例:

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

優(yōu)點:

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

缺點:

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

適用場景:

  • 簡單 PV/UV 打點,曝光上報。
  • 無需保證必達,只要發(fā)出請求就行。

2. fetch / XMLHttpRequest 上報

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

代碼示例:

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

優(yōu)點:

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

缺點:

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

適用場景:

  • 錯誤日志、性能埋點。
  • 需要可靠上報、需要認證或者復(fù)雜參數(shù)時。

3. navigator.sendBeacon

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

代碼示例:

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

優(yōu)點:

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

缺點:

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

適用場景:

  • 頁面 unload 時的上報,比如用戶行為日志、退出日志。

4. WebSocket 上報

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

優(yōu)點:

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

缺點:

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

適用場景:

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

總結(jié)

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

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

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

相關(guān)文章

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

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

    本文主要對JS實現(xiàn)太極旋轉(zhuǎn)的思路進行分析,步驟清晰,簡短的文字,深入的理解。需要的朋友可以看下
    2016-12-12
  • js實現(xiàn)彈窗插件功能實例代碼分享

    js實現(xiàn)彈窗插件功能實例代碼分享

    這篇文章主要介紹了
    2013-12-12
  • JavaScript下申明對象的幾種方法小結(jié)

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

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

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

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

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

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

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

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

    javascript prototype原型操作筆記

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

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

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

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

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

    webpack打包進度展示以及美化教程

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

最新評論

专栏| 溧阳市| 凤翔县| 铜鼓县| 安庆市| 淳安县| 广宗县| 麦盖提县| 额尔古纳市| 鹤庆县| 高淳县| 喀什市| 大连市| 平原县| 广汉市| 高阳县| 社旗县| 屯昌县| 盐津县| 德昌县| 贵州省| 简阳市| 武川县| 马山县| 永昌县| 苍梧县| 新津县| 黄梅县| 清流县| 调兵山市| 如皋市| 兴隆县| 安图县| 淮滨县| 视频| 高唐县| 灵寿县| 罗山县| 唐山市| 宁国市| 墨脱县|