前端小技巧: 設計一個簡版前端統計 SDK

統計 sdk 如何設計

1 ) 概述

  • 客戶端一個sdk ,把數據發送給服務端(第三方統計平臺)
  • 服務端產生一個統計的報表

2 )需求點

  • 訪問量:pv
  • 自定義事件:用戶的一切行為我們都可以自定義采集
  • 性能,錯誤

3 ) 代碼實現

const PV_URL_SET = new Set()class MyStatistic {constructor(productId) {this.productId = productIdthis.initPerformance() // 性能統計this.initError() // 初始化錯誤監控},// 發送統計數據send(url, params = {}) {// 加上必要參數params.productId = this.productIdconst paraArr = []for(let key in params) {const val = params[key]paramsArr.push(`${key}=${value}`)}const newUrl = `${url}?${paramsArr.join('&')}`const img = document.createElemnt('img')img.src = newUrl // get},// 初始化性能統計initPerformance() {// console.table(performance.timing) // 這個apiconst url = 'yyy'this.send(url, performance.timing) // 給最原始、最完整的結果,原始數據// 注意,至少要在 DOMContentLoaded 調用它},initError() {window.addEventListener('error', event => {const { error, lineno, colno} = eventthis.error(error, { lineno, colno })})// Promise未catch住的報錯window.addEventListener('unhandledrejection', event => {this.error(new Error(event.reason), {type: "unhandledrejection"})})},pv() {// sendconst href = location.hrefif (PV_URL_SET.get(href)) return // 不重復發送this.event('pv')PV_URL_SET.add(href) 、、 },event(key, val) {// 自定義事件// sendconst url = 'xxx' // 自定義事件,統計serverthis.send(url, {key, val})}// 統計用戶 try catch 里的errorerror(err, info={}) {// sendconst url = 'zzz'const {message, stack} = errthis.send(url, {message, stack, ...info})}
}const s = new MyStatistic('a1') // 至少要在 DOMContentLoaded 調用它s.pv() // pv只能調用,在 spa路由中切換需要調用
s.event('vip', 'ok')
s.event('vip', 'cancel')
s.event('vip', 'close')try {} catch(e) {s.error(ex, {})
}

4 )總結

  • 以上是一個簡版的原生js的實現方式
  • 所有細節處理都在代碼中
  • 如果使用框架,如React和Vue等,可替換成內部的捕獲錯誤方法

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

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

相關文章

uView框架的安裝與Git管理

參考鏈接:Http請求 | uView - 多平臺快速開發的UI框架 - uni-app UI框架 安裝 打開我們項目的cmd進行下載: yarn add uview-ui 首先我們要確定,未下載前的文件目錄以及下載后,是多了個文件目錄node_modules 下載完成之后我們就…

QQ2023備份

需要修改的路徑(共3處) 這三處路徑中,只有一處是需要修改的 QQPC端-主菜單-設置-基本設置-文件管理 點擊上面的“”自定義“”,然后修改路徑即可 修改路徑后提示 然后等一會才會關干凈QQ的相關進程,關閉后才會有自動…

外貿找客戶軟件工具:WhatBotPlus 4.6.2

WhatBot 是所有使用 Whatsapp 與客戶溝通的中小型公司、企業或自由職業者的理想軟件。借助 WhatBot,您可以通過 Whatsapp 發送新聞通訊活動,還可以設置自動回復。由于命令一旦配置,客戶就可以獲取各種信息、接收優惠和促銷等,從而…

linux安裝tomcat

Tomcat官網: http://tomcat.apache.org 配置java環境 上傳jdk1.8到服務器。安裝jdk [rootjava-tomcat1 ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/[rootjava-tomcat1 ~]# cd /usr/local/[rootjava-tomcat1 local]# mv jdk1.8.0_191/ java 設置環境…

51單片機獨立按鍵以及矩陣按鍵的使用以及其原理--獨立按鍵 K1 控制 D1 指示燈亮滅以及數碼管顯示矩陣按鍵 S1-S16 按下后鍵值 0-F

IO 的使用–按鍵 本文主要涉及8051單片機按鍵的使用,包括獨立按鍵以及矩陣按鍵的使用以及其原理,其中代碼實例包括: 1.獨立按鍵 K1 控制 D1 指示燈亮滅 2.通過數碼管顯示矩陣按鍵 S1-S16 按下后鍵值 0-F 文章目錄 IO 的使用--按鍵一、按鍵消抖二、獨立按…

node.js和npm的安裝與環境配置(2023最新版)

目錄 安裝node.js測試是否安裝成功測試npm環境配置更改環境變量新建系統變量 安裝node.js 1、進入官網下載:node.js官網 我選擇的是windows64位的,你可以根據自己的實際情況選擇對應的版本。 2、下載完成,安裝。 打開安裝程序 接受協議 選…

【RabbitMQ基礎編程模型】

文章目錄 RabbitMQ基礎編程模型基礎編程模型step1、首先創建連接,獲取Channelstep2、聲明Exchange-可選step3、聲明queuestep4、聲明Exchange與Queue的綁定關系-可選 RabbitMQ基礎編程模型 RabbitMQ的使用生態已經相當龐大,支持非常多的業務場景&#x…

五、HotSpot細節實現

一、并發標記與三色標記 問題:三色標記到底發生在什么階段,替代了什么。并發標記 1、并發標記( Concurrent Marking) 從 GC Root 開始對堆中對象進行可達性分析,遞歸掃描整個堆里的對象圖,找出要回收的對象,這階段耗…

【大數據分析】

系列文章目錄 文章目錄 系列文章目錄前言一、數據分析框架二、數據分析方法1.數據清洗&數據探索2.數據清洗之異常值判別3.數據清洗之缺失值處理4.數據探索5.結構優化 三、大數據可視化1.大數據可視化概念1.1 定義1.2 數據可視化的意義 2.可視化類型和模型2.1 科學可視化2.2…

網站內容審核功能的重要性

網站內容審核功能的重要性在保護用戶權益、維護網站形象、遵守法律法規等方面都起到了至關重要的作用。 維護網站的合法性和道德性:網站內容審核功能的存在可以幫助過濾和刪除違法、淫穢、惡意、詐騙等不良內容,保證網站內容的合法性和道德性。 保護用…

前端部分知識點總結

小程序接口的通用協議是什么 小程序接口的通用協議是HTTPS。 小程序體驗版本打開后顯示空白,只有點擊"打開調試模式"再次打開才能顯示正常,原因是體驗版本的接口協議是HTTP,但小程序只認HTTPS,所以不會去調接口&#…

Python表單處理

目錄 通過Flask處理表單 通過Flask-WTF處理表單 通過Flask-WTF驗證表單 通過Flask處理表單 表單是在網頁中搜集用戶信息的各種表單控件的集合區域,表單控件包括文本框、單選框、復選框、提交按鈕等,用于實現客戶端和服務器端之間的數據交互。 利用F…

用Java寫一個拼圖游戲

目錄 運行出的游戲界面如下: User類 CodeUtil類 游戲設置 登陸代碼 注冊代碼 游戲代碼 運行出的游戲界面如下: 按住A不松開,顯示完整圖片;松開A顯示隨機打亂的圖片 User類 package domain;/*** ClassName: User* Author: Kox*…

AI人工智能和大模型(概念)之二

Pytorch的安裝 通過Anaconda安裝PyTorch更為便捷 張量:(1)Tensor可以是高維的(2)并非是PyTorch中才有的概念(3)PyTorch運算的基本單元(4)基礎數據定義和運算&#xff0…

【Windows】安裝 Apache服務 -- 實操詳細版

👨?🎓博主簡介 🏅云計算領域優質創作者 ??🏅華為云開發者社區專家博主 ??🏅阿里云開發者社區專家博主 💊交流社區:運維交流社區 歡迎大家的加入! 🐋 希望大家多多支…

使用Pytorch實現變分自編碼器

使用Pytorch實現變分自編碼器 可以結合這篇VAE講解文章閱讀這篇blog post代碼。 # Import necessary packages. import os import torch import torch.nn as nn import torch.nn.functional as F import torchvision from torchvision import transforms from torchvision.ut…

java打包到docker,以及idea遠程調試

這里主要介紹 dockerfile的打包方式 一、打包jar包到容器 1. 在要打包的項目中創建dockerfile,dockerfile與項目的pom.xml是同級 2. 編輯dockerfile文件 FROM openjdk:8 VOLUME ["/data/untitled"] COPY target/untitled-1.0.jar "/app.jar"…

人工智能技能要求

人工智能技能要求可以根據具體的職位和任務而有所不同,但一般來說,以下是一些常見的人工智能技能要求: 編程技能:掌握至少一種編程語言,并能夠運用該語言進行算法開發和數據處理。 機器學習:了解常見的機器…

開關電源基礎認知

前言 從開關電源(BMS充電器)入門硬件之——開關電源基礎認知 有紕漏請指出,轉載請說明。 學習交流請發郵件 1280253714qq.com 1.什么是開關電源 開關電源是利用現代電力電子技術,控制開關管開通和關斷的時間比率,維…

【vSphere | VM】虛擬機自定義規范Ⅲ —— 創建 Linux 虛擬機自定義規范

目錄 4. 創建關于Linux系統的虛擬機自定義規范4.1 新建 Linux 虛擬機自定義規范(1)名稱和目標操作系統(2)計算機名稱(3)時區(4)自定義腳本(5)網絡&#xff08…