前端埋点pv,uv以及实现思路

2023-11-03

   埋点就是在应用或系统中通过特定的流程收集一些信息,用来跟踪项目或系统使用的状况,后续用来进一步优化产品或是提供运营的数据支撑;

目前埋点实现方法可以分为三种类型:

  1. 手动埋点
    在需要统计数据的地方插入代码,需要入侵业务代码,优点是数据统计比较精准有效,缺点是不能与业务代码分离,后期需求更新需要同步更新;

  2. 无埋点
    无埋点并不是说不需要埋点,而是全部埋点,通过js脚本,收集想要收集的数据。通过定期上传记录文件,配合文件解析,解析出来我们想要的数据,并生成可视化报告供专业人员分析因此实现“无埋点”统计,无需在项目代码中插入,复用性高,无需跟随项目的改动而改动,但是传输数据多,无法定制,可能会增大服务器压力;

  3. 可视化埋点
    通常是指用户通过可视化工具快速配置采集节点(圈点),在前端自动解析配置,并根据配置上传埋点数据,能够支持产品运营随时调整埋点,无需再走发版流程,直接把配置结果推入到前端,数据采集流程更简化,也更方便产品的迭代。

本次通过编写埋点sdk的形式来实现数据的收集,类比于百度统计的实现方式,记录一下过程中遇到的问题;首先插入一段代码引入js:

   (function () {
        var ma = document.createElement('script');
        ma.type = 'text/javascript';
        ma.async = true;
        ma.src = "/js/ma1.js";
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ma, s);
    })();

此处js文件是存在static目录下的。

整体分为三个阶段:
(一)埋点阶段
(二)数据收集阶段
(三)后端处理阶段

可以参考这篇文章的原理分析https://blog.csdn.net/lucky541788/article/details/103795942。

前两个阶段是由前端实现,下面是开发过程中前端遇到的问题及解决办法:

  1. 相对于比较特殊的路由页面跳转如nuxt-link,route-link,router.push等,跳转页面js脚本不会重新加载,所以需要在项目的守卫路由中添加一句代码用来执行sdk中的方法,一次来实现页面跳转并收集数据;

  2. 页面数据的传递时机,由于需要统计访问时间,所以在beforeunload方法中传到后台,该方法是在页面关闭或跳转之前执行的;

  3. 对于唯一设备id可以在sdk引入的时候设置一个cookie值,过期时间设置10年或更久,用来区分用户;

  4. 页面如果打开了但是没有访问,在浏览器里访问的是其他的页面,可以使用window的onblur和onfocus方法,页面离开执行onblur,将数据传回后台,进入页面再执行onfocus方法;

  5. 对于不同项目的跨域问题,可以通过生成Img标签来进行传参,如
    var img = new Image(1, 1);
    var src = ‘http://xxxxxx?userName=’ + params;
    img.src = src;

通过上面的问题分析,将数据的传输时间以及如何传输问题基本解决,接下来需要策划传输的每一个数据应该如何使用和应该统计到哪些指标:

  1. pv
    即用户浏览量,用户每次打开或者刷新页面该页面pv值就加1,通过后台接收到的数据统计访问该页面的次数;
  2. uv
    即独立访客数,一个电脑设备为一个访客,通过设置永久cookie来标识不同的设备,同一访客访问不同页面uv加一,一天内同一设备多次访问同一页面uv只加一;
  3. 跳出率
    跳出率=访问一个页面的uv数 / uv总数;
  4. 页面平均访问时长
    从页面进入的时候开始计时,到页面刷新或者关闭的时候停止计时,将时间传到后台,再统计页面访问了多少次,把所有时间相加除以次数,即可得到平均访问时间;
  5. 访问ip数
    访问页面的局域网ip数,通过document.domain获取,不同的ip访问就加一,一天内同一ip访问多次只加一;
  6. 用户访问地址
    通过搜狐的插件获取用户当前所在地及设备ip;
  7. 访问来源类型
    来源类型可以分为三类:搜索引擎,外部链接、直接访问;通过document.referrer参数,若为空则是直接访问,再将常见的搜索引擎标识放入一个数组,当document.referrer有值时检索该值中有没有对应的搜索引擎,有来源就是搜索引擎,没有即为外部链接;
  8. 页面加载时长
    window.performance.timing对象中的各个时间节点,通过loadEventEnd - fetchStart可以计算出页面加载时长;
  9. 浏览器类型
    通过navigator.userAgent参数将访问的浏览器内核进行处理,得到访问的浏览器的名称;
  10. 浏览器和系统版本
    navigator.appVersion包含浏览器和系统的版本;
  11. 电脑屏幕信息
    window.screen对象中包含设备屏幕宽高,色深,分辨率。
  12. 地图热力图
    通过用户地址统计各地区使用人数,在地图上用不同颜色渲染出来。

pv与uv与ip的区别:

    pv统计的是浏览量,即访问了就会加一,uv统计的是不同的访客数,若统一访客多次访问同一页面,则只算一次,而ip数统计的是访问网站的ip数,同一个ip一个网站只记一次;

对于统计页面中的点击事件形成热力图的想法,由于某些页面的响应式开发,布局在不同尺寸下会发生变化,通过埋点sdk统计准确性不高;

结论:通过将js脚本插入到项目中,从中获取用户信息,设备信息,操作信息,浏览器信息等数据,传入后台进行处理,其他业务数据需要在具体的项目中进行代码埋点,多种埋点方式结合起来才能对产品进行更加全面的分析与了解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端埋点pv,uv以及实现思路 的相关文章

  • Windows 下载安装 netcat(nc)命令

    Windows 下载安装 netcat命令 netcat nc 下载 netcat nc 安装 配置环境变量 测试 netcat nc 下载 netcat nc 下载地址 https eternallybored org misc netc
  • 脉动阵列

    脉动阵列是一个比较古老的概念 早在1982年就有了 可是 最近google的TPU采用了这个结构 脉动阵列又火了起来 我也是从今年新入职了一家公司后才接触到的 对比之前自己设计的AI架构 脉动阵列确实有很多优势 所以本文从传统AI计算架构和
  • java中filereader读取文件_FileReader读取文件

    前言 FileReader是一种异步文件读取机制 结合input file可以很方便的读取本地文件 input file 在介绍FileReader之前 先简单介绍input的file类型 input的file类型会渲染为一个按钮和一段文字
  • [IDEA]报错 Could not autowire. No beans of 'XXXMapper' type found. less... (Ctrl+F1)

    在Idea的spring工程里 经常会遇到Could not autowire No beans of xxxx type found的错误提示 但程序的编译和运行都是没有问题的 这个错误提示并不会产生影响 但红色的错误提示在有些有强迫症的

随机推荐

  • ES基础操作及java代码

    ES相关随手记 文章目录 ES相关随手记 一 基本操作 1 es三大属性 索引 映射 文档 1 1 索引 1 2 映射 1 3 文档 1 3 2 文档的批量操作 二 高级查询 说明 1 查询所有 2 term 基于关键词查询 3 range
  • Apache + Tomcat + proxy_module 集群配置详解

    见转载 地址 http blog csdn net wccmfc123 article details 22829219 Apache Tomcat集群配置详解 2 补充 对 tomcat6 conf server xml文件修改配置如图
  • Camera日记(一)-ISP

    ISP Image Signal Processor 既图像信号处理 用于处理图像信号传感器输出的图像信号 它在相机系统肿占有核心主导的地位 是构成相机的重要设备 背景 图像采集设备存在缺陷 作用 数字图像经过采集 存储 显示 达到与人眼直
  • isce D-InSAR

    一 数据准备 二 配置文件insarApp xml 我设置的解缠常用参数grass和snaphu
  • 初等代数不等式1

    10 3赫尔德不等式还可以写成 即 即 简称 幂均值的几何均值不小于积均值 注 赫尔德与切比雪夫的不同点 赫尔德要求是 切比雪夫要求是同调 赫尔德的积均值小 切比雪夫的积均值大 10 4若 和为三个正实数序列 且 则 式称为加权赫尔德不等式
  • 【leetcode】93. 复原 IP 地址

    93 复原 IP 地址 题目链接 思路分析 代码实现 题目链接 93 复原 IP 地址 思路分析 既然是复原IP地址 那么就必然需要一个判断是否符合IP的函数 其次我们对于一段处理好的子串 需要将其提取出来 以及在回溯的时候 我们要将这一段
  • 第十一章 从Javaweb原⽣jdbc到MyBatis3.X

    1 javaweb通过原 jdbc访问数据库 原 jdbc访问数据库步骤 加载JDBC驱动程序 创建数据库的连接 创建preparedStatement 执 SQL语句 处理结果集 关闭JDBC对象资源 Springboot项 测试原 JD
  • 安捷伦34970a驱动及软件安装_最小最干净无需安装的驱动软件

    对于新安装系统电脑的驱动更新 驱动精灵基于驱动之家十余年的专业数据积累 支持度高达98 3 已经为数亿用户解决了各种电脑驱动问题 是目前有效的驱动软件 驱动精灵 支持市面99 的网卡设备 完美解决了系统新装问题 但对老电脑来说 也有自身的一
  • 计算二维离散随机变量的联合概率分布

    一 定义 Joint probability distribution 给定至少两个随机变量X Y 它们的联合概率分布 Joint probability distribution 指的是每一个随机变量的值落入特定范围或者离散点集合内的概率
  • Win11设置共享文件的方法

    1 按下键盘的win r键打开运行窗口 输入compmgmt msc指令 如图所示 2 随后在计算机管理的用户文件夹中 打开Guest账户 如图所示 3 如下图所示完成选项勾选以后 点击确定按钮 如图所示 4 接着右键需要分享的文件 打开属
  • Xeon可扩展Xeon睿频

    进行多线程AVX512运算的时候 需要把频率降下来 使用更低的电压 才能把功耗控制在一个TDP范围内 这就是全核AVX512默频 如果散热给力 可以提高电压增加点功耗 频率提高点 AVX512全核睿频 进行多线程AVX2运算的时候 单个核心
  • react性能优化是哪个周期函数

    shouldComponentUpdate 这个方法用来判断是否需要调用render方法重新描绘dom 因为dom的描绘非常消耗性能 如果我们能在shouldComponentUpdate方法中能够写出更优化的dom diff算法 可以极大
  • 0基础如何学习软件测试?1小时给你安排明白

    先上一张学习路线 在测试行业已经呆了5年多了 也算得上行业经验资深了吧 基本上也是摸清了这个行业的发展 所以今天也想对有转行想法的朋友分享一下经验 能够让你对这个行业有个大致的了解和对以后的发展有所规划 不会像是个无头苍蝇一样毫无头绪 东打
  • 测试环境搭建

    测试环境的搭建 为什么搭建测试环境 如果开发人员调试代码和测试人员测试软件在同一环境内 则他们的工作会互相影响 因此 需要将待测软件系统单独部署在一个独立于开发环境的测试环境中 了解软件系统结构 B S 浏览器 服务器 概念 使用浏览器访问
  • mysql 数据备份与存储引擎

    数据备份 mysql home bin下提供了mysqldump exe mysqldump sh 的可执行文件 用于备份数据库 语法 无需进入MySQL命令行 在本机命令行即可 mysqldump h IP P port u账号 p da
  • 创建SSAS项目

    2 3 创建Analysis Services 设计好了结构良好的数据仓库 并且将需要分析的业务数据装载到了数据仓库中之后 就为满足商务决策的全方位需求打下了根基 以后的操作都是基于这些拥有数据的数据仓库进行的 但是 对数据的多维分析却并不
  • 中间件运维分析中的选型与实践

    在近期的 Kylin Data Summit 上 好买财富平台架构总监王晔倞在互联网专场上分享了好买财富在中间件运维分析平台的演进过程 好买财富为什么选择从广泛应用的 ELK 转向 Apache Kylin 呢 王晔倞 我们在监控上 通常会
  • 使用python做FamaMacBeth回归

    金融资产定价常常需要用到FamaMacBeth回归 我们用python写一个模板 可以直接将数据调成需要的格式 代入代码即可出结果 所要求的数据格式 可以从链接下载 https download csdn net download weix
  • 剑指 Offer 40. 最小的 k 个数

    系列文章目录 文章目录 系列文章目录 前言 一 剑指 Offer 40 最小的 k 个数 二 使用步骤 1 引入库 解法一 暴力破解法 冒泡排序 可惜超过时间限制 解法二 快速排序法 方法三 基于快速排序的数组划分 总结 前言 一 剑指 O
  • 前端埋点pv,uv以及实现思路

    埋点就是在应用或系统中通过特定的流程收集一些信息 用来跟踪项目或系统使用的状况 后续用来进一步优化产品或是提供运营的数据支撑 目前埋点实现方法可以分为三种类型 手动埋点 在需要统计数据的地方插入代码 需要入侵业务代码 优点是数据统计比较精准