前端如何設計一個回溯用戶操作的方案

同一個項目,為什么我本地無法復現,只有客戶的設備才復現?

如何獲取用戶的操作路徑呢?
兩種方案:埋點和rrweb
埋點就很簡單了,將所有可能操作的節點都進行預埋數據;但埋點簡單并不省心(可能會漏掉某個場景)。接下來我們重點探討rrweb方案。

rrweb

一、錄制端(用戶端)

1. 獲取用戶信息
import { getInstance } from "./instance"let token = ''export const getToken = () => {if (token) {return token}const tokenFromSession = sessionStorage.getItem('token')if (tokenFromSession) {token = tokenFromSessionreturn tokenFromSession}const inst = getInstance()const tokenFromInst = inst.getToken()if (tokenFromInst) {token = tokenFromInstreturn tokenFromInst}const __options = inst.getOptions()const { token: tokenFromOption } = __optionsif (tokenFromOption) {token = tokenFromOptionreturn tokenFromOption}
}
2. 用戶信息換錄制配置
a. 配置為空,退出錄制,結束流程
b. 有配置數據,進行第3步
3. 從接口中解析配置數據(獲取起始時間點,結束時間點,錄制時長)
4. 當前時間點校驗(【起始時間,結束時間】)
const { id, singleLength, startTime, endTime } = data
userConfig = { id, maxTime: singleLength, startTime, endTime }
const nowTime = Date.now()
if (nowTime < startTime || nowTime > endTime) {console.log('[未命中配置]-時間未生效')return
}
5.開始錄制,并存儲數據
function record() {return rrweb.record({checkoutEveryNth: 100,emit(event, isCheckout) {if (isCheckout) {// 保存數據saveEvents()events = []}// 臨時存儲events.push(event)},})
}
6. 超出錄制時長,立刻停止,并上報數據

// 停止錄播 - 時間限制
sumSecondTimeout = setTimeout(() => {// 停止錄播stopRecord()
}, maxTime * 60 * 1000)
// 上報數據
http('url',{jsonListObject: events, // 事件數據},{headers: {'X-Phone': userPhone,},})

二、回溯端(B端)

1. 根據手機號獲取用戶的錄制數據(events)
2. 引入rrweb播放端
import rrwebPlayer from 'rrweb-player';
import 'rrweb-player/dist/style.css';new rrwebPlayer({target: videoRef.current, // 可以自定義 DOM 元素// 配置項props: {events,},
});

用戶錄制端之所以要設置這么多條件,在于C端設備復雜(性能好壞會影響錄制);為了保證用戶體驗,需要在盡量不干擾用戶操作的前提下去錄制。

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

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

相關文章

概率論考前一天

判斷是不是分布函數&#xff1a;單調不減&#xff0c;右連續&#xff0c;F負無窮為0&#xff0c; F正無窮為1 判斷是不是密度函數&#xff1a;非負性&#xff08;函數任意地方都大于0&#xff09;&#xff0c;規范&#xff1a;積分為1

2Hive表類型

2Hive表類型 1 Hive 數據類型2 Hive 內部表3 Hive 外部表4 Hive 分區表5 Hive 分桶表6 Hive 視圖 1 Hive 數據類型 Hive的基本數據類型有&#xff1a;TINYINT&#xff0c;SAMLLINT&#xff0c;INT&#xff0c;BIGINT&#xff0c;BOOLEAN&#xff0c;FLOAT&#xff0c;DOUBLE&a…

FPGA工程師成長四階段

朋友&#xff0c;你有入行三年、五年、十年的職業規劃嗎&#xff1f;你知道你所做的崗位未來該如何成長嗎&#xff1f; FPGA行業的發展近幾年是蓬勃發展&#xff0c;有越來越多的人才想要或已經踏進了FPGA行業的大門。很多同學在入行FPGA之前&#xff0c;都會抱著滿腹對職業發…

springCloudGateway+nacos自定義負載均衡-通過IP隔離開發環境

先說一下想法&#xff0c;小公司開發項目&#xff0c;參考若依框架使用的spring-cloud-starter-gateway和spring-cloud-starter-alibaba-nacos, 用到了nacos的配置中心和注冊中心&#xff0c;有多個模塊&#xff08;每個模塊都是一個服務&#xff09;。 想本地開發&#xff0c;…

深度解析 React 中 setState 的原理:同步與異步的交織

在 React 框架的核心機制里&#xff0c;setState是實現動態交互與數據驅動視圖更新的關鍵樞紐。深入理解setState的工作原理&#xff0c;尤其是其同步與異步的特性&#xff0c;對于編寫高效、穩定且可預測的 React 應用至關重要。 一、setState 的基礎認知 在 React 組件中&a…

向量數據庫如何助力Text2SQL處理高基數類別數據

01. 導語 Agent工作流和 LLMs &#xff08;大語言模型&#xff09;的出現&#xff0c;讓我們能夠以自然語言交互的模式執行復雜的SQL查詢&#xff0c;并徹底改變Text2SQL系統的運行方式。其典型代表是如何處理High-Cardinality Categorical Data &#xff08;高基數類別數據&am…

qBittorent訪問webui時提示unauthorized解決方法

現象描述 QNAP使用Container Station運行容器&#xff0c;使用Docker封裝qBittorrent時&#xff0c;訪問IP:PORT的方式后無法訪問到webui&#xff0c;而是提示unauthorized&#xff0c;如圖&#xff1a; 原因分析 此時通常是由于設備IP與qBittorrent的ip地址不在同一個網段導致…

工程水印相機結合圖紙,真實現場時間地點,如何使用水印相機,超簡單方法只教一次!

在工程管理領域&#xff0c;精準記錄現場信息至關重要。水印相機拍照功能&#xff0c;為工程人員提供了強大的現場信息記錄工具&#xff0c;助力工程管理和統計工程量&#xff0c;更可以將圖片分享到電腦、分享給同事&#xff0c;協同工作。 一、打開圖紙 打開手機版CAD快速看圖…

GO語言實現KMP算法

前言 本文結合朱戰立教授編著的《數據結構—使用c語言&#xff08;第五版&#xff09;》&#xff08;以下簡稱為《數據結構&#xff08;第五版&#xff09;朱站立》&#xff09;中4.4.2章節內容編寫&#xff0c;KMP的相關概念可參考此書4.4.2章節內容。原文中代碼是C語言&…

LeetCode 熱題 100_從前序與中序遍歷序列構造二叉樹(47_105_中等_C++)(二叉樹;遞歸)

LeetCode 熱題 100_從前序與中序遍歷序列構造二叉樹&#xff08;47_105&#xff09; 題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;遞歸&#xff09;&#xff1a; 代碼實現代碼實現&#xff08;思路一&#xff08;遞歸…

1.2 ThreeJS能力演示——模型導入導出編輯

1、模型導入導出編輯能力 1&#xff09;支持導入基本類型模型 最常用&#xff0c;最適合作為web演示模型的是glb格式的&#xff0c;當前演示glb模型導入 // 1) 支持導入基本類型模型const loader new GLTFLoader();loader.load(./three.js-master/examples/models/gltf/Hors…

文檔智能:OCR+Rocketqa+layoutxlm <Rocketqa>

此次梳理Rocketqa&#xff0c;個人認為該篇文件講述的是段落搜索的改進點&#xff0c;關于其框架&#xff1a;粗檢索 重排序----&#xff08;dual-encoder architecture&#xff09;&#xff0c;講訴不多&#xff0c;那是另外的文章&#xff1b; 之前根據文檔智能功能&#x…

ESP8266 AP模式 網頁配網 arduino ide

ESP8266的AP配網,可以自行配置網絡,一個簡單的demo,文檔最后有所有的代碼,已經測試通過. 查看SPIFFS文件管理系統中的文件 賬號密碼是否存在,如不存在進入AP配網,如存在進入wifi連接模式 // 檢查Wi-Fi憑據if (isWiFiConfigured()) {Serial.println("找到Wi-Fi憑據&#…

ubuntu官方軟件包網站 字體設置

在https://ubuntu.pkgs.org/22.04/ubuntu-universe-amd64/xl2tpd_1.3.16-1_amd64.deb.html搜索找到需要的軟件后&#xff0c;點擊&#xff0c;下滑&#xff0c; 即可在Links和Download找到相關鏈接&#xff0c;下載即可&#xff0c; 但是找不到ros的安裝包&#xff0c; 字體設…

使用 WPF 和 C# 繪制覆蓋網格的 3D 表面

此示例展示了如何使用 C# 代碼和 XAML 繪制覆蓋有網格的 3D 表面。示例使用 WPF 和 C# 將紋理應用于三角形展示了如何將紋理應用于三角形。此示例只是使用該技術將包含大網格的位圖應用于表面。 在類級別&#xff0c;程序使用以下代碼來定義將點的 X 和 Z 坐標映射到 0.0 - 1.…

[Do374]Ansible一鍵搭建sftp實現用戶批量增刪

[Do374]Ansible一鍵搭建sftp實現用戶批量增刪 1. 前言2. 思路3. sftp搭建及用戶批量新增3.1 配置文件內容3.2 執行測試3.3 登錄測試3.4 確認sftp服務器配置文件 4. 測試刪除用戶 1. 前言 最近準備搞一下RHCA LV V,外加2.9之后的ansible有較大變化于是練習下Do374的課程內容. 工…

SK海力士(SK Hynix)是全球領先的半導體制造商之一,其在無錫的工廠主要生產DRAM和NAND閃存等存儲器產品。

SK海力士&#xff08;SK Hynix&#xff09;是全球領先的半導體制造商之一&#xff0c;其在無錫的工廠主要生產DRAM和NAND閃存等存儲器產品。以下是SK海力士的一些主要產品型號和類別&#xff1a; DRAM 產品 DDR4 DRAM 特點: 高速、低功耗&#xff0c;廣泛應用于PC、服務器和移…

WordPress如何配置AJAX以支持點擊加載更多?

WordPress 配置 AJAX 支持點擊加載更多內容通常涉及到前端 JavaScript 和服務器端的配合。以下是基本步驟&#xff1a; 安裝插件&#xff1a;你可以選擇一個現成的插件如 “Advanced Custom Fields” 或者 “WP Infinite Scroll”&#xff0c;它們已經內置了 AJAX 功能&#xf…

【IDEA 2024】學習筆記--文件選項卡

在我們項目的開發過程中&#xff0c;由于項目涉及的類過多&#xff0c;以至于我們會打開很多的窗口。使用IDEA默認的配置&#xff0c;個人覺得十分不便。 目錄 一、設置多個文件選項卡按照文件字母順序排列 二、設置多個文件選項卡分行顯示 一、設置多個文件選項卡按照文件字…

【C】數組和指針的關系

在 C 語言 和 C 中&#xff0c;數組和指針 有非常密切的關系。它們在某些情況下表現類似&#xff0c;但也有重要的區別。理解數組和指針的關系對于掌握低級內存操作和優化程序性能至關重要。 1. 數組和指針的基本關系 數組是一個 連續存儲的元素集合&#xff0c;在內存中占據一…