看到周围朋友陆续写文章,难免有些手痒,但是这段时间看的东西有点杂,就随意发表点自己的看法吧。
前端埋点和后端埋点
个人觉得前后端埋点主要有这样几个差异:
1.前端埋点,收集数据在客户端进行,意味着可以收集更多view端的数据,如用户事件行为,界面变化等。后端埋点,收集数据在服务器端进行,意味着收集的是http request发生时的数据,获取到更多的是数据层,业务逻辑层,比如数据交互等。当然也取决于架构,前端mv*+后端RESTful API;与前端html模板 + 后端MVC,两种架构在前后端能够获得的数据差异也很大
2.反作弊,两种数据收集方式都有可能发生spam,但是后端埋点产生spam,则需要实实在在发生请求到服务器;而前端所有界面上的数据都可以更改,并且,可以直接调用数据传输接口来产生假数据
3.爬虫数据,web的前端埋点基本使用JS,目前爬虫虽然可以能模拟用户真实请求,执行JS,但大部分爬虫并不执行JS,因此前端埋点不一定包含爬虫产生数据,但后端埋点,一定会包含爬虫产生数据。
4.数据暂存与性能开销,通常,数据收集之后并非立即发送到数据服务器,而是会暂存起来,并在请求页面/view,或者一段时间后,或者网络状态良好时一起发送到数据服务器。前端埋点,数据发送到数据服务器之前都是存在用户的设备端,比如cookie,localStorage里,而后端埋点,大部分情况都是存在服务器的内存中。同样,运行数据收集程序的性能开销,前端埋点由用户设备承担,后端则由服务器承担(注意,相比前端,后端更需要注重性能)
5.用户/访问识别,前端埋点,web主要使用cookie/localstorage里存放的用户信息,APP使用设备标识符来识别是否同一个用户,但是cookie和设备标识符可被清空/修改/重置。如果没有储存用户ID,则使用多个设备的同一个用户无法被关联。并且在web前端,跨域尤其是跨顶级域共享cookie非常麻烦,识别同一用户准确度较低。后端埋点,识别跨服务器的同次访问可共享session,识别同一个用户可以使用IP地址+UA拼成的fingerprint(这种方法不能跨设备),用户登陆后使用用户ID进行关联(此方法可跨设备,且准确度较高)
埋点与无埋点
通过看到知乎里几个WA工具的CEO的文章和问答,以及iCDO/WAW/CWA的founder 宋星的文章『无埋点实现监测的真相——革新还是噱头?』我对埋点与无埋点认识是这样:
1.我们常说的埋点或无埋点,基本两者都是指前端添加代码
2.埋点和无埋点,都需要添加基础代码/SDK,只不过,以埋点方式的基础代码/SDK主要用来采集访问数据,把采集好的数据做预处理,按照一定格式发送到数据服务器,对于一些特定事件追踪接口调用则不在基础代码范围之内;而无埋点,则从事件监听,到事件数据,访问数据采集,到预处理,再到发送,全部都由基础代码完成。
3.埋点方式,在数据收集前,选择需要采集的数据,除了基础代码/SDK,还需要在特定位置添加特定代码,以获取所需额外数据,以追踪更多用户行为,访问事件等;无埋点在数据收集之后,再圈选需要的数据,除了基础代码/SDK,不需要添加额外代码(APP端最多还需要再代码里创建一个数据追踪对象实例,可以理解为初始化),因此用无埋点的方式,如果发现数据圈选的不合适,不需要再动代码,不必走产品发布流程,修改较方便
4.埋点方式能够获取到的数据,比无埋点方式获取到的数据多:以web端为例,无论是dom上的事件(如点击,拖拽,键盘事件等),还是bom上的事件(如摇一摇,横竖屏切换等重力感应事件),数据交互,dom变化,都可以以埋点的方式追踪到;而无埋点,主要获取1)绑定了事件的dom对象,2)事件发生时传递的event对象(以及其所有属性),也就是仅在dom上绑定的事件,所以无埋点获取的数据范围要小一些
综上
无论前端埋点还是后端埋点,无论是埋点还是无埋点,并无优劣,只是特性不同,因此使用场景也会不一样。具体还需要综合企业资源,技术架构,产品特性等多方面考虑。