揭开GrowingIO无埋点的神秘面纱
 
早在研究用户行为分析的时候,就发现国内的GrowingIO在宣传无埋点技术,最近正好抽出时间来研究一下所谓的无埋点到底是什么样的。
我分六部分来分析一下无埋点的流程以及背后的技术分析,前5部分主要是分析圈选的流程,技术以及使用上的坑,最后一部分介绍一下利用js点击元素获取XPath的demo;
 
1、由GrowingIO的智能路径来引出无埋点的重要性
 
首先,我们来看一下,最近GI新出的功能----智能路径,智能路径到底是什么?作用是什么呢?我们看下图
 

看完这个图,也许很多人都会猜个八九不离十。其实这个就是我们常说的路径转化,之所以叫做智能路径,是因为其实他是一个漏斗的反推。那么漏斗的反推是什么意思呢?其实就是通过选择最后总的目标来到推出在实际的系统里,用户到达这个最终目标的情况(包括路径和转化率)。
下面我们看看整个的过程,
第一步计入页面,并选择转化的最终目标
 

第二步,选择发送验证码到手机,直接计算出用户在实际使用当中到达最终目标的几种路径以及转化率;
 

第三步,创建漏斗(这里就不详细展开)
 
那么其实说了这么多,只是介绍了一下智能路径的使用功能,和我们的无埋点又有什么关系呢?其实大有关系,细心的同学会发现我第二章图里用红框框住的东东,这是什么东东呢?其实这就是我们页面上的一个可点击事件,可点击事件可以是一个按钮,一个A链接等等,那么这个可点击事件是怎么变成可选的?这里即将引出我们的第二部分内容----圈选。
 
 
2、圈选的使用介绍
 
在我们介绍圈选之前,我们要知道一个名词,那就是元素 ,元素,我的理解就是页面上的某个元素,一个链接,一个按钮,一个图片等等;
元素是组成圈选的最基本概念,因为圈选,要选的就是这些元素。
圈选这个词并不好理解,如果把他叫做可视化事件设置,是不是更好理解一些?因为圈选就是在一个页面上,来用鼠标选出页面中可点击的元素并保存。
这么说大家可能不太理解,下面我用一个例子来说明圈选的过程;
1、新建圈选
通过iframe加载目标页面
 

2、点击页面上的圈选,会发现已经被圈选过并保存的元素,会显示红框。那么我们现在圈选一个登陆+注册的区域。并命名为登录注册导航入口,然后保存。细心的同学会不会联想到我第一部分给大家说过红框里的东东?那么这个东东就是这么来的,是通过圈选,来定义并保存的。
 

 
圈选的过程介绍完了,我们结合第一部分和第二部分应该就能明白,为什么圈选是GI里数据分析的基石,因为GI里所有的数据分析都需要自定义事件,而自定义时间正是通过圈选来完成的。
那我们可不可以理解成GI通过可视化埋点来代替了人工(开发人员)埋点?也就是可以理解为无埋点的基石就是圈选(可视化埋点);
 
 
3、无埋点的好处
 
无埋点的好处是什么?借用一下别人的总结图例
 

 
只不过第一点,可以改将埋点的使用者门槛大大降低,网上维护人员可以在后台可视化的去设置要统计的事件。
再来看一下无埋点的噱头,难怪大家这么喜欢无埋点,鼓吹无埋点,确实是可吹性很多,再借用一张图来看一下无埋点的噱头
 
 

 
4、分析web端圈选的实现方案(猜测)
 
重头戏来了,那么圈选功能是如何实现的呢?下面来看我一步一步分析圈选;
 
1)打开chrome浏览器的开发人员模式,在没有圈选前看一下,假设我们要圈选个人与家用产品,如下图(注意用黑框框住的部分,为了和圈选的红色框体区分):
 

2)圈选之后,看看发生了什么变化
 
 

3)结合第一步和第二步我们能看出来,在我圈选的时候,在这个span 元素上多出了一些标签,下面我们来对比一下代码:
 
<span class="tab">个人与家用产品</span>
<span class="tab" data-target="click-eTLOtbt7" data-screenshot="KnC5eJZS">个人与家用产品</span>
 
可以发现,在圈选的时候,加入了data-target和data-screenshot这两个标签
而在DIV区域 增加了class以及data-orig两个标签
 
<div class="growing-circle-cover" data-orig="click-8XxDMxZ2" style="width: 144px; height: 60px; left: 0px; top: 0px; position: absolute;"></div>
这个应该就是一个区域的覆盖层,类似于上图蓝色覆盖层一样的东东;
 
4)当我们保存以后看看是什么样的
 

 
span标签又变成如下,并有了id 还有target。
 
<span class="tab growing-circle-tagged" data-tag-id="4PYKbAM9" data-tagged-target="tagged-hxKiWboT">个人与家用产品</span>
 
id我已经明白了,应该就是标签表的id。
class也变成标记过的class。
data-tagged-target具体什么含义,还有待分析。
 
5)当我们重新刷新,并到浏览模式下的时候,这些增加了的标签又都不见了。
那我们就会想他们这是通过什么来关联区域和我们自定义得的标题呢?
之前和质保做自动化测试的时候,定位元素,除了CSS选择器和ID,一般就是XPath,这个没有唯一id,没有唯一class。所以我想到了XPath;
应该是用XPath和和我保存时候的标题等关联起来的。
无意间翻看了一个人写的GI部署的文章,里面有这样一句话,我将截图放进来。
 

 
他提到了XPath,那么目前最新版本并没有xpath这个选项,很有可能做到了隐藏。
这应该可以证明我的分析是正确的,XPath就是圈选的关键。
 
5、圈选的一些坑(我们做的时候要考虑到)
 
     a) 圈选后大层覆盖小层,再想修改难上加难  
这个图我们圈选了登录和注册,但是登陆和注册区域较大,这样的话,如果我想修改注册,是点不到的,也修改不了。
 

b) 浏览器的兼容性问题,圈选页面在IE8浏览器报JS错误;
 
 

 
 
6、关于XPath的DEMO
说一千道一万,我们只是分析出了GI可能用XPATH进行关联,但是XPath在页面上如何获取?我做了一个demo
URL传送门(限内网访问):http://192.168.52.53:90/xpath/testAlertXPath.html
 
列举了几种不同情况的元素如何获取XPath;
只需打开页面点击相应的元素,即可弹出XPath
 
 

 
到目前为止GrowingIO无埋点的神秘面纱已经被我们揭开,无埋点的基础是圈选,圈选的基础是元素。无埋点的说法并不准确,与其说无埋点不如说成可视化埋点更为简单,易理解。
 
此文章属于丛立原创,如有转发请标记原博地址:http://www.cnblogs.com/congli1985/p/6097920.html
 
 

揭开GrowingIO无埋点的神秘面纱的更多相关文章

  1. 揭开自然拼读法(Phonics)的神秘面纱

    揭开自然拼读法(Phonics)的神秘面纱 自然拼读法  (Phonics),是指看到一个单词,就可以根据英文字母在单词里的发音规律把这个单词读出来的一种方法.即从“字母发音-字母组合发音-单词-简单 ...

  2. 揭开js之constructor属性的神秘面纱

    揭开 constructor 在 Javascript 语言中,constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中.这个 ...

  3. 通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱

    本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段 ...

  4. 揭开C++类中虚表的“神秘面纱”

    C++类中的虚表结构是C++对象模型中一个重要的知识点,这里咱们就来深入分析下虚表的在内存中的结构. C++一个类中有虚函数的话就会有一个虚表指针,其指向对应的虚表,一般一个类只会有一个虚表,每个虚表 ...

  5. 毫不留情地揭开 ArrayList 和 LinkedList 之间的神秘面纱

    先看再点赞,给自己一点思考的时间,思考过后请毫不犹豫微信搜索[沉默王二],关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有技术大佬整理的面试题, ...

  6. 揭开Sass和Compass的神秘面纱

    揭开Sass和Compass的神秘面纱 可能之前你像我一样,对Sass和Compass毫无所知,好一点儿的可能知道它们是用来作为CSS预处理的.那么,今天请跟我一起学习下Sass和Compass的一些 ...

  7. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  8. 带你揭开ATM的神秘面纱

    相信大家都用过ATM取过money吧,但是有多少人真正是了解ATM的呢?相信除了ATM从业者外了解的人寥寥无几吧,鄙人作为一个从事ATM软件开发的伪专业人士就站在我的角度为大家揭开ATM的神秘面纱吧. ...

  9. 揭开.NET消息循环的神秘面纱(GetMessage()无法取得任何消息,就会进入Idle(空闲)状态,进入睡眠状态(而不是Busy Waiting)。当消息队列不再为空的时候,程序会自动醒过来)

    揭开.NET消息循环的神秘面纱(-) http://hi.baidu.com/sakiwer/item/f17dc33274a04df2a9842866 曾经在Win32平台下奋战的程序员们想必记得, ...

随机推荐

  1. 轻量级权限管理系统(renren-security)

    renren-security是一个轻量级权限管理系统,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.使用renren-security搭建项目,只需编写30%左右代码,其余的代码交给系统自动生 ...

  2. Gym 101102J---Divisible Numbers(反推技巧题)

    题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an a ...

  3. PostgreSQL获取年月日

    1.获取当前日期的年份 select to_char(t.detect_date,'YYYY') select extract(year from now())为double precision 格式 ...

  4. JavaWeb前端基础复习笔记系列 二

    课程:孔浩前端视频教程(JavaScript系列:1~5讲) <html> <head> <title></title> <!--html只负责显 ...

  5. [moka同学笔记]Yii2.0循环查询并对结果累加求和

    在控制器中查询好数据  $model 在视图中输入 <?php foreach($model as $key=>$r):?> <tr class="text-cent ...

  6. Windows Git中文文件名乱码

    在Windows下使用git,安装包如下: https://git-for-windows.github.io/ 在使用git bash时git 默认中文文件名是 xx% 是因为 对0x80以上的字符 ...

  7. ajax传参到实体类对应字段

    之前看公司的代码,从页面ajax传参数到接口类,接口类用一个实体接收.我一直以为c#会自动识别,赋值到同名的字段. 我曾和朋友讨论过,双方辩论.朋友认为c#没有这种功能,没有这样高级匹配的机制.而我因 ...

  8. js 的点击事件

    <button id="btn">click</button> var btn=document.getElementById('btn'); 第一种: b ...

  9. ArcGIS server 开发实践之【FeatureLayer类】

    全是干活,你值得拥有 要素图层类简介:Class:FeatureLayer //调用方式:require(["esri/layers/FeatureLayer"],function ...

  10. 基于RulesEngine的业务规则实现

    规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策.比较常见 ...