【前端埋點】純前端實現 A/B Test

“純前端實現 A/B Test”,意思就是 沒有后端分流、也不依賴流量網關,那么只能靠前端邏輯來做“流量切分”。


🎯 目標

  • 80% 的用戶 → A 頁面
  • 20% 的用戶 → B 頁面
  • 且要保證 同一個用戶每次訪問結果一致(否則用戶刷新頁面時 A/B 會跳來跳去,沒意義)。

? 實現思路

方法一:基于隨機數 + 本地存儲(推薦)

function assignABTest() {// 先看本地是否已有分組結果let group = localStorage.getItem('ab_group')if (!group) {// 隨機生成一個 [0,1) 的數const rand = Math.random()// 按比例分配group = rand < 0.8 ? 'A' : 'B'localStorage.setItem('ab_group', group)}return group
}// 使用
const group = assignABTest()
if (group === 'A') {window.location.href = '/pageA.html'
} else {window.location.href = '/pageB.html'
}

👉 特點:

  • 第一次訪問時隨機分配。
  • 后續訪問保持一致(因為結果存了 localStorage)。
  • 不需要后端,不需要流量標識。

方法二:基于用戶特征(比如 UA / IP Hash)

如果你不想依賴 localStorage(例如用戶清理緩存后可能變化),可以用一些用戶環境特征來算哈希值:

function hashCode(str) {let hash = 0for (let i = 0; i < str.length; i++) {hash = (hash << 5) - hash + str.charCodeAt(i)hash |= 0}return Math.abs(hash)
}function assignABTestByUA() {const ua = navigator.userAgentconst hash = hashCode(ua)const ratio = hash % 100 // 映射到 0-99return ratio < 80 ? 'A' : 'B'
}

👉 特點:

  • 同一設備 UA → 分組穩定。
  • 但不同瀏覽器、換設備就會變組。

方法三:基于 Cookie(和 localStorage 類似)

function getCookie(name) {const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'))return match ? match[2] : null
}function setCookie(name, value, days) {const d = new Date()d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000)document.cookie = `${name}=${value};expires=${d.toUTCString()};path=/`
}function assignABTest() {let group = getCookie('ab_group')if (!group) {group = Math.random() < 0.8 ? 'A' : 'B'setCookie('ab_group', group, 30) // 保存30天}return group
}

👉 特點:

  • 可以跨刷新穩定,甚至跨子頁面。
  • 但 cookie 會隨請求發給后端,不太純粹。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98671.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day22_【機器學習—集成學習(3)—Boosting—Adaboost算法】

Adaptive Boosting(自適應提升)是基于 Boosting思想實現的一種集成學習算法&#xff0c;核心思想是通過逐步提高那些被前一步分類錯誤的樣本的權重來訓練一個強分類器。一、Adaboost算法直線相當于一個弱學習器&#xff0c;正確的數據權重減小&#xff0c;錯誤的數據權重增加二…

C#語言入門詳解(18)傳值、輸出、引用、數組、具名、可選參數、擴展方法

C#語言入門詳解&#xff08;18&#xff09;傳值、輸出、引用、數組、具名、可選參數、擴展方法一、傳值參數1. 值類型2. 引用類型&#xff0c;并且創建對象3. 引用類型&#xff0c;不創建對象二、引用參數1. 值類型2. 引用類型&#xff0c;創建新對象3. 引用類型&#xff0c;不…

模型部署:(二)安卓端部署Yolov5-v6.0目標檢測項目全流程記錄

模型部署&#xff1a;&#xff08;二&#xff09;安卓端部署Yolov5-v6.0目標檢測項目全流程記錄1、下載NCNN項目2、下載基于安卓的yolov5項目3、修改相應的配置文件4、將項目打包成apk包5、部署自己訓練的yolov5模型6、相關資料下載&#xff1a;1、下載NCNN項目 # 鏈接地址 ht…

圖形基礎算法:如何將點與帶曲線邊的多邊形位置關系算法做穩定

簡介判斷點與多邊形位置關系算法是幾何算法中最基礎的算法之一&#xff0c;包括布爾運算在內的非常非常多的算法都會用到它。它的穩定是算法庫穩定的關鍵。下面我們從一個邊都是直線的多邊形開始了解射線法的原理。然后看看引入曲線后會帶來哪些問題&#xff0c;以及在實際應用…

react的filber架構

好問題 &#x1f44d; 你問的是 React Fiber 架構。這是 React 16 引入的核心機制&#xff0c;用來解決 React 在大規模更新時的性能問題。下面我給你從 背景 → Fiber 是什么 → 原理 → 優點 → 流程 來系統講。一、為什么需要 Fiber&#xff1f;在 React 15 及以前&#xff…

Lucky STUN穿透結合群暉NAS實現docker下transmission監聽端口動態更新

參考文章 LCUKY系列教程 一 「LUCKY STUN穿透」使用 cURL 自動修改 Transmission 的監聽端口 二 「LUCKY STUN穿透」使用 Webhook 自動修改 qbittorrent 的監聽端口 三 LUCKY STUN穿透在Windows上使用UPnP工具為BT客戶端自動添加內外端口號不同的映射規則 四「LUCKY STUN穿透」…

如何在Ubuntu暢玩鳴潮等游戲

本教程只包括Steam上的游戲。# 更新軟件源 sudo apt update # 安裝Steam sudo apt install steam首先&#xff0c;在Ubuntu的snap商店安裝Steam&#xff0c;啟動&#xff0c;登陸&#xff0c;下載游戲。到這里的操作都比較簡單&#xff0c;對于沒有反作弊的游戲&#xff0c;往往…

機器學習09——聚類(聚類性能度量、K均值聚類、層次聚類)

上一章&#xff1a;機器學習08——集成學習 下一章&#xff1a;機器學習10——降維與度量學習 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、聚類任務&#xff08;無監督學習…

解決 Docker 構建中 Python 依賴沖突的完整指南

問題背景 在基于 registry.cn-shenzhen.aliyuncs.com/all_dev/dev:invoice-base 鏡像構建 Docker 容器時,我們遇到了一個常見的 Python 依賴管理問題: ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-…

光子計算芯片實戰:Lightmatter Passage互連架構性能評測

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 摘要 隨著人工智能計算需求呈指數級增長&#xff0c;傳統電子計算…

基于樹莓派與Jetson Nano集群的實驗邊緣設備上視覺語言模型(VLMs)的性能評估與實踐探索

概述 2018年&#xff0c;TensorFlow Lite團隊的Pete Warden曾提出&#xff1a;“機器學習的未來在于微型化”。如今&#xff0c;隨著人工智能向高性能視覺強大的視覺語言模型&#xff08;Vision-language models, VLMs&#xff09;發展&#xff0c;對高性能計算資源的需求急劇…

華為Ai崗機考20250903完整真題

華為Ai崗機考20250903 華為自26屆秋招&#xff08;2025年起&#xff09;對AI崗位機考進行了改革&#xff0c;考試題型調整為20道選擇題&#xff08;15道單選(6分)5道不定項選擇(12分)&#xff09;2道編程題(150300)。 題目核心圍繞人工智能技術&#xff08;如Transformer架構…

k8s+jenkins+harbor構建Devops平臺

一、環境準備1、準備一主一從k8s機器&#xff0c;&#xff08;設備好可以一主多從也行&#xff09;2、一臺harbor倉庫機器&#xff08;dockerhub訪問不了&#xff09;二、安裝nfs服務1、在k8s機器上yum install nfs-utils -y systemctl start nfs systemctl enable nfs2、創建共…

為什么 socket.io 客戶端在瀏覽器能連上,但在 Node.js 中報錯 transport close?

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

人才教育導向下:老年生活照護實訓室助力提升學生老年照護服務能力

一、老年生活照護實訓室建設背景與意義 &#xff08;一&#xff09;適應老齡化社會需求 我國老齡化程度持續加深&#xff0c;老年照護服務人才缺口不斷擴大。培養專業照護人才成為當務之急&#xff0c;職業教育需承擔重要責任。點擊獲取實訓室建設方案 &#xff08;二&…

我在嘉順達藍海的安全堅守

作為嘉順達藍海的資深安全員&#xff0c;每天清晨 6 點&#xff0c;我都會站在物流基地的入口處&#xff0c;看著一隊隊橙色的嘉順達藍海危險品運輸車整齊列隊。那抹醒目的橙色&#xff0c;不僅是嘉順達藍海的標志&#xff0c;更是我和 200 多名同事堅守 12 年的安全承諾。今天…

云原生監控系統 Prometheus大總結 20250909

本章內容如下&#xff1a; Prometheus 介紹 Prometheus 部署和配置 Node Exporter 采集數據 Pushgateway 采集數據 PromQL 查詢語言 Grafana 圖形化展示 Prometheus 標簽管理 Prometheus 告警機制 Prometheus 服務發現 各種Exporter 高級功能 Prometheus 實現容器監控 Promethe…

EPNN:基于嵌入式偏振神經網絡的水下成像增強方法(未做完)

Enhancing Underwater Imaging for Robot through Embedded Polarization Neural Network EPNN:基于嵌入式偏振神經網絡的水下成像增強方法 1 論文核心概念 本文提出了一種名為嵌入式偏振神經網絡(Embedded Polarization Neural Network, EPNN) 的方法,用于顯著提升水下…

基于單片機冷藏運輸車環境檢測/水產品運輸環境檢測設計

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;單片機作品題目速選一覽表&#x1f680; &#x1f449;&#x1f449;&#x1f449;&#x1f449;單片機作品題目功能速覽&#x1f680; &#x1f525;更多文章戳&#x1f449;小新單片機-CSDN博客&#x1f68…

基于STM32設計的人體健康監護系統(華為云IOT)_280

文章目錄 一、前言 1.1 項目介紹 【1】項目開發背景 【2】設計實現的功能 【3】項目硬件模塊組成 【4】設計意義 【5】國內外研究現狀 【6】摘要 1.2 設計思路 1.3 系統功能總結 1.4 開發工具的選擇 【1】設備端開發 【2】上位機開發 1.5 參考文獻 1.6 系統框架圖 1.7 系統原理…