项目中的埋点

什么是埋点

所谓“埋点”,是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程

埋点的技术实质,是先监听软件应用运行过程中的事件,当需要关注的事件发生时进行判断和捕获,然后获取必要的上下文信息,最后将信息整理后发送至服务器端。所监听的事件,通常由操作系统、浏览器、APP框架等平台提供,也可以在基础事件之上进行触发条件的自定义(如点击某一个特定按钮)。一般情况下,埋点可以通过监测分析工具提供的SDK来进行编程实现。

(SDK:软件开发工具包,Software Development Kit)

埋点的目的

在简书上看到@老虎色 举的例子:

平时我们支付的时候打开支付宝,打开扫一扫,扫描对方的二维码,输入金额(2元,小金额免输入支付密码),点击确认,支付成功。

你为了资金的安全,做了两个设定。打开支付宝,打开扫一扫,扫描对方的二维码,弹出提示“您正在付款,请输入密码”,然后要你先输入支付密码(不能免输入),然后在输入金额(2元),点击确认时,弹出提示“为了保障你的安全,请先进行实名认证”,接着跳转到认证的页面。

先不管这两个设定是否合情合理,你这里就可以以埋点的形式将两次弹出做行为收集,并对相应的动作进行连串行为分析,并以此为根据形成用户画像等最终数据。

几种埋点方式

手记上的@谯洪敏对几种埋点做了详细的总结。

1.手动埋点(代码埋点)

纯手动写代码,调用埋点SDK的函数,在需要埋点的业务逻辑功能位置调用接口上报埋点数据。

手动埋点优势:手动埋点让使用者可以方便地设置自定义属性、自定义事件。所以当你需要深入下钻,并精细化自定义分析时,比较适合使用手动埋点。

手动埋点缺陷:项目工程量大,需要埋点的位置太多,而且需要产品开发运营之间相互反复沟通,容易出现手动差错,如果错误,重新埋点的成本也很高。这会导致整个数据收集周期变的很长,收集成本变的很高,而且效率很低。因为手动埋点需要开发人员完成,所以每次有埋点更新,或者漏埋点,都需要重新走上线发布流程,更新成本也高,对线上系统稳定性也有一定危害。

手动埋点的本质:

从javascript中能轻松获得以下信息:

域名:document.domainURLdocument.URL
页面标题:document.title
分辨率:window.screen.height & window.screen.width
颜色深度:window.screen.colorDepth
Referrer:document.referrer
客户端语言:navigator.language
除了上面的列举的常规信息以外,还有大量的业务数据,都需要通过手动写javascript去实现。

手动埋点常用方式:

(1)命令式

$(document).ready(()=>{
// ... 这里是你的业务逻辑代码
sendData(params);  //这里是发送你的埋点数据,params是你封装的埋点数据
});
// 按钮点击时发送埋点请求
$(‘button‘).click(()=>{
// ... 业务逻辑
sendData(params); //同上
});

这里的sendData有很多种方式,比如基于ajax发送json数据,或者使用url连接带上params,或者使用一像素图片带上数据,在或者使用head带上埋点也可以。封装方式多种多样。

(2)声明式

<button data-mydata="{key:‘uber_comt_share_ck‘, act: ‘click‘,msg:{}}">打车</button>

这里声明了自定义属性data-mydata,可以在你的SDK中去扫描和识别这些自定义属性,并解析封装数据,在SDK中按照自定义规则去绑定事件并发送埋点数据。
(3)前端框架式

如果使用Vue或者React等前端框架,这些框架都有自己的各种生命周期,为了减少重复性的手动埋点次数,可以在各个生命周期位置,根据你的需求封装你所需的埋点。比如你是SPA单页应用,你希望在每一个页面的componentDidMount埋点,并由此确定用户已经打开了页面。

(4)css埋点

.link:active::after{
    content: url("http://www.example.com?action=yourdata");
}
<a class="link">点击我,会发埋点数据</a>

这里使用了很巧妙的css的某些特征,这些可以触发发送请求的特征。

以上是比较常见的手动埋点方案,当然还有很多其他方式和有待挖掘的方案。

2.可视化埋点(框架式埋点、无痕埋点)

解决了纯手动埋点的开发成本和更新成本,通过可视化工具快速配置采集节点(圈点),在前端自动解析配置,并根据配置上传埋点数据,比起手动埋点看起来更无痕,这里的配置数据可以设置过滤条件,避免针对所有元素(比如全埋点),可以在调用开启自动监控API时通过设置一些特征属性,来过滤不符合条件的元素,实现只针对某些元素进行自动上报数据的需求。

可视化埋点配置化能力相对手动埋点更强,是对手动埋点的补充而不是代替,很多手动埋点点都可以通过好的规划和架构变为可视化埋点。

3.无埋点

无埋点并不是没有任何埋点,所谓无只是不需要工程师在业务代码里面插入侵入式的代码。只需要简单的加载了一段定义好的SDK代码,技术门槛更低,使用与部署也简单,避免了需求变更,埋点错误导致的重新埋点。

通过这个SDK代码,前端会自动全量采集全部事件并上报埋点数据,能够呈现用户行为的每一次点击、每一次跳转、每一次登录等全量、实时用户行为数据,这些数据传到后端后,可通过用户分群、漏斗对比等功能,分析不同访问来源、不同城市、不同广告来源等多维度的不同转化细节,细而全。

无埋点的优势:无埋点相比可视化埋点,在解决数据“回溯”问题上更有优势,如果你想分析某一天某个控件的点击情况,如果你没有针对这个按钮做可视化埋点,则只能从你针对这个按钮做可视化配置的这一时刻之后才有埋点数据,而无埋点,则从你部署SDK那一刻就一直有数据在收集;无埋点做热力图也更有优势,无埋点可以告诉使用者这个界面上每个控件分别被点击的概率是多大,通过热力图清晰可见。

无埋点劣势:自定义属性不灵活,传输时效性差,数据可靠性欠佳,耗费网络流量,还会增加服务器负载,而且兼容性也不佳。

埋点数据采集能力比较

比如这个页面,点击确认按钮,如果使用无埋点和可视化埋点,在这里可能只能获取到某时刻某个人点击了确认,提交了一个订单,仅此而已。如果你希望拿到里面的首付款,月供,车型车款、用户详情等深度业务信息,就只能靠手动埋点获取。

无埋点和可视化埋点虽然使用和部署都很简单,但是在数据精确度和详细程度的获取能力上代码埋点更强大。一般来说,我们的产品都是根据业务场景混合使用三种埋点模式来完成我们的数据收集。

原文地址:https://www.cnblogs.com/sherrycat/p/11156560.html

时间: 2024-10-04 01:56:14

项目中的埋点的相关文章

iOS项目中使用CocoaPods问题解决方案

文/yehot(简书作者)原文链接:http://www.jianshu.com/p/a2007d8e2607著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 为什么iOS项目中应该使用CocoaPods作为第三方依赖管理工具?因为: (全文完) 开个玩笑.真正的原因是这样: 目录: 从一个bug说起 分析需求及解决方案 确定方案 CocoaPods学习资料 一.从一个bug说起: 1.公司的项目里统一使用SVG格式的图片:2.GitHub上只有一个star数超过一千的SVG解析库

Hyperledger项目中使用的工具

Hyperledger作为一个众多IT厂商参与的项目,全球化的开源社区,其项目的组织形式.流程.工具,都值得借鉴.好工匠离不开好工具,我注意到Hyperledger项目中使用了大量的好工具,包括项目管理.源代码管理.wiki.视频会议.会议备份.IM.maillist.Wiki等等,可以列一个长长的list.先埋个坑,回头来填这篇文章. 原文地址:https://www.cnblogs.com/huahuayu/p/8513680.html

现有项目中集成Flutter

本文列举了项目开发使用Flutter会遇到的问题,以及如何使用Flutter module在现有项目中集成Flutter,并对其原理进行了分析. 最近在做的一个商业项目,完全的使用Flutter编写的,这其中的坑,只有写过的人才能体会到. 1. 纯Flutter项目的问题 在论述纯Flutter项目问题之前,我先表述下我的观点(仅限于纯Flutter项目,目前时间2018年6月26日,不排除Flutter的发展,让我的观点改观): 对于个人开发者,可以使用纯Flutter去开发App尝鲜: 对于

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢

DotNet项目中的一些常用验证操作

在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入. 如果在后台对用户输入的信息进行验证会相对的安全,在出现信息验证不合法时,可以直接在程序中抛出异常,终止程序的运行. 现在提供几种较为常用的验证方法,可以减少在项目中开发时间和错误性: 1.判断域名:         /// <summary>         /// 普通的域名         /// </summ

javaWeb项目中如何实现在线查看pdf文件

最近有需求要实现在网页直接查看pdf,word,excel文件.但是实际当中并没有很好的开源插件供我们使用,确实有一些付费的插件不错,也很好用,但是对于我来说都不适合. 现在只是单纯的找到了围魏救赵的方法. 就是先实现显示pdf文件,其他文件用别的方式去转成pdf.虽然这个方法确实不好,但是也是没有办法的办法了,如果以后能有更好的,那就再发布别的吧. 这里我就直接介绍pdf的显示方法. 直接上干货. 首先在E:\tomcat8\webapps这个目录下面拷贝下面这个文件 http://yunpa

Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)

在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config]platformName=AndroidappPackage=com.sheinsideappActivity=.module.GuideActivitybaseUrl=http://0.0.0.0:4723/wd/hubfindElementTimes=10[cmd]openAppium=nod

团队项目中个人的定位及计划

我们团队在这一次的移动APP开发计划中准备做一个针对上海地区大学分数线进行专业推荐的APP,根据前几章的学习,团队中的成员将会被初步分为开发人员.测试人员以及PM(program manager).我在这次的软件开发中担任开发人员的职务. 在开发开始的阶段,全员首先一起明确这次APP的主题,一起分析好这款APP将要实现怎样的功能,将要面向哪些受众:对于市面上的同类软件,我们还能添加哪些实用的功能.首先将会尽可能地将上海地区内高校近几年的分数线.每个系的最低录取分数统计好录入系统中,再根据考生相应

160504项目中的error

在学习时,曾经遇到将同组的项目导入时出现红叉的情况.但是没有发现具体错误.开始以为是build path 的问题,于是在Libraries中将相关Jar包重新检查并添加了一遍,但并没有解决问题.后来仔细检查后才发现,是一个很简单的问题,之前都想复杂了.JDK版本不一样,把JDK7换掉重新装JDK8,再把相关配置好,红叉就解决大半. 作为菜鸟程序员,有时候一个很小的问题就能造成很大影响.而经验不足时,更不知道从何入手.为了能顺利编写项目,更为了能在编写项目时能解决出现的问题和错误而不是不知所措,就