大数据时代的到来意味着数据量的爆炸,也意味着收集数据的难度将大幅增加。为了将海量的数据收集起来,埋点技术应运而生。然而随着大数据的发展和深入,用户的要求越来越高,埋点技术开始变得力不从心。

近期,一些公司开始以“无埋点技术”为卖点,开始到处宣传无埋点比埋点好,那么到底事实如何了?

埋点技术的时代

埋点技术通过在代码的关键部位植入统计代码,追踪用户的点击行为;或者植入多段代码,追踪用户的连续行为;并通过建立模型等方法,得出用户操作行为;最终作为建立产品数据系统的一个环节准确的收集数据。

那么为什么通过埋代码就可以准确的收集数据呢?

原因有三:

  • 首先,每个操作的界面都有其独立的标示性,具有无重复性,利用此可以统计访问、访客等;

  • 其次,每个界面的事件针对当前页面都是独立的、唯一的,相互之间具有独立性,对此进行埋代码后可以统计事件行为;

  • 最后,在任一界面都会有一个或者多个事件,每个事件会有不同的参数,每个事件参数都具有完整性,在埋点后通过建模可以得出准确的数据,最终目的是为未来产品优化方向做指导的。

这是笔者在以前公司时候,写的前端代码:

<%= link_to "全部雇员#{corp.staffers_count}", employees_corp_path(corp.pretty_abbrev, from: 'corps_detail_all_employee'), class: 'more', onclick: "addGaTrackEvent('corps_detail','goto_all_employee','corps_detail_right')" %>

       像这样addGaTrackEvent的onclick事件几乎遍布整个项目,而且因为浏览器的兼容问题,有时候还不得不采用这种简单粗暴的方式添加“埋点”

埋点技术的弊端

其实,从上面的代码就看出了这种“埋点技术”的弊端,

  • 首先,IT人员在埋点的时候,必须先清楚要收集的是什么数据,这些数据用来做什么,在什么地方收集这些数据,而且往往会导致代码的丑陋。

  • 其次,一旦数据有问题,想要纠正则需要重新进行埋点,使得之前的工作变成无用功。

  • 最后,埋点增加了测试的难度,需要考虑业务其外的东西。

所谓无埋点技术,并非完全不用埋点,而是不用在设置代码前先行定义需要采集的事件或功能

大多对于可交互式的应用程序,例如Android应用,iOS应用,网站,Windows Phone应用,Windows的窗体程序、Java的窗体程序等等,其实在界面渲染时都有几点共性:

  • 图形背后都有图形树,我们所看到的输入框、文本框、按钮等等其实都是view,而view的摆放其实也都是有对应的视图方式,例如线性布局、网格布局、表格布局、相对、绝对等等,然后view加布局就组成了我们要看到的界面,比如最简单的就是网站的DOM结构了,有层级关系,对于Android而言就是View视图的层级关系了,调用系统级API基本上都能获取这个树结果。

  • 窗体都有生命周期,比如Android的Activity的生命周期

  • 对于我们可视的这些界面元素,当他们显示出来、被点击了、被选中了、被滑动等等操作的时候,系统也都会有相应的接口给开发者通知他们去处理,所以也就是对于View而言可以绑定或者委托或者是监听他们的一些触发事件,比如刚刚提到的加载、点击、选中等操作。

讲到这里,应该很清楚了,应用程序在呈现程序界面的时候,其实有一套生命周期的准则在里面,控制了从界面元素创造到响应用户操作到销毁,同时也有一个图形树的准则在里面,控制了这些界面元素的显示层级和顺序,最后在用户交互(包括展现)各个界面元素的时候,会给开发者提供一系列的接口,让开发者去处理这些行为。

所以原理清楚了,后续无埋点其实也就能想到怎么做了,现在市面上主流有两种,一种是预先跟踪所有的渲染信息,一种是滞后跟踪的渲染信息。两种做法不太一样,后者要简单一些,前者要重一些,但是也有一些办法优化(不交互的元素肯定多于交互元素),各家也就都有自己的方法在里面。

无埋点技术的弊端:只看数据采集的方式,而不考虑数据的传输,存储,分析,可视化反馈,都是耍流氓。

因为你根本没办法定义“所有的信息”。抓取的信息越多,也就意味着浪费的流量也越多,存储和索引的成本也越高。

信息检索有一个最关键的概念是 precision/recall。无埋点是尽可能地提高 recall,而这个成本一部分是终端客户承受,另一部分是在 SaaS 服务的数据管线上增加压力。对于 PC 端的应用,这可能不是问题。但是对于移动端的应用,这就意味着更多的移动数据成本和耗电,此外还有相关的隐私风险。

从“埋点技术已死?”开始说起相关推荐

  1. 是SEO技术已死 还是你不懂SEO?

    是SEO技术已死 还是你不懂SEO?现在各个博客的SEO文章同质化比较严重,因为SEO被大家都写烂了,写来写去无非就是内容.外链.用户体验.但我总是看到很多人评论说SEO技术已死,我实在忍不住想写一下 ...

  2. JSP技术已死 ? (Java Server Page technology will die) ?

    JSP技术已死 ? (Java Server Page technology will die) ? 自从JamesGosling开发Java语言,SUN大力推行基于Java的从前端到后端的完整的企业 ...

  3. 关于“VCL已死、RAD已死”答读者问

    这两天在上海参加erlang的大会,来不及写第五小节,先回复一些评论吧.其中最主要的是nanyu的一组评论,大概有三.四篇,写到了不少东西.下面一一道来. 有关评论请参见: http://blog.c ...

  4. 【转帖】十大已死和垂死IT技术和职业

    国际上颇具声望的 ComputerWorld (国内< 计算机世界>的美国原版)两天前由一位女记者撰写的 "The top 10 dead (or dying) computer ...

  5. 前端已死?全栈当立?取法于中,仅得其下。

    开篇明义,前端已死?根本就是扯淡.前端技术精微渊深,驳杂宽广,除了基础的 HTML.CSS 和 JavaScript 技术外,前端技术还涉及到许多其他相关技术和工具,比如前端框架.UI 库.自动化构建 ...

  6. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  7. 百度“已死”,百度“真香”

    骂百度已然成为互联网的政治正确了. 10w+阅读量刷屏的一篇<搜索引擎百度已死>,和后续到达的作战大队<百度搜索引擎死了吗?><谁杀死了百度搜索?><百度双手 ...

  8. 批着DDD,实则是以数据库为中心------数据库已死

    现代软件和以往传统软件主要区别在于:现代软件基于internet互联网技术,运行于开放的网络环境,不象传统软件只是运行在封闭的局域网,运行环境的区别就决定了软件操作用户的多少,在一个开放互联网环境, ...

  9. NLP领域的ImageNet时代:词嵌入已死,语言模型当立

    NLP领域的ImageNet时代:词嵌入已死,语言模型当立 https://www.toutiao.com/a6742137243487437316/ NLP领域的ImageNet时代:词嵌入已死,语 ...

最新文章

  1. selenium+Python(鼠标和键盘事件)
  2. Python3.5模块‘OS’‘sys’
  3. Python3 数字运算
  4. 通过Nagios监控weblogic服务
  5. Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
  6. 具有弹性效果的ListView
  7. C++学习之路 | PTA乙级—— 1038 统计同成绩学生 (20 分)(精简)
  8. python爬虫---(2)爬虫基本流程
  9. oracle 清除数据库缓存
  10. android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...
  11. MySql学习10-----存储过程和函数
  12. MD5加盐的一个简单算法
  13. qt.qpa.plugin:Cound not load the QT platform plugin “windows“ in “ “even though it was found.
  14. 三国志·魏书·牵招传
  15. Win11系统怎么关闭hyper-v虚拟机?
  16. 网络入门-IP地址规划
  17. ubuntu编译工程出现: fatal error: error writing to /tmp/cc1ezU8m.s: No space left on device
  18. B. Equalize by Divide - 思维+构造+排序
  19. 华南主板bios怎么恢复出厂设置_最详细的主板bios设置图解教程bios设置指南史无前例...
  20. laravel用户列表分页和模糊搜索api

热门文章

  1. Spore是一个平台,就知道没那么简单
  2. matlab ga rbf,GA PSO优化的RBF神经网络
  3. 神经网络与机器学习 笔记—单神经元解决XOR问题
  4. Win64 驱动内核编程-13.回调监控模块加载
  5. 【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
  6. 【Windows 逆向】OD 调试器工具 ( OD 附加进程 | OD 调试器面板简介 | 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 )
  7. 【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )
  8. 【Android 应用开发】自定义View 和 ViewGroup
  9. Docker 安装 Redis
  10. spring-cloud-config 搭建-入门级(一)