揭开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. 使用PackageManager获得应用(包)信息

    PackageManager是Android中一个很有用的类,能够获取已安装的应用(包)的信息,如应用名称.图标.权限,安装.删除应用(包)等. 以下代码可以获得已安装应用(包)的信息: // 包管理 ...

  2. GNOME on Arch Linux

    Arch Linux上Gnome桌面截图欣赏: 相比而言,Debian的壁纸一直好像格调不够啊:

  3. 百度地图自定义Marker

    最近写了百度地图的Demo,所以总结下遇到的问题: 1.首先在百度地图中创建应用时用到 发布版SHA1是在Preferences下的Android下的Build中;2.在使用百度地图时,先要创建一个A ...

  4. SSO单点登录实现原理与总结

    一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...

  5. [转载]OSI七层模型详解

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  6. 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转

    包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Hex 1.字节数组(byte[])转为十六进制(Hex ...

  7. SQL join中on与where区别

    本文导读: 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户.例如在使用left jion时,on条件是在生成临时表时使用的条件,它不管on中的条件是否 ...

  8. 系统配置文件的加载设置-以xml文件为例

    前言:开发中经常会遇到加载一些配置文件信息,这些信息变化的概率很小,不需要实时的更新.这样的信息放在数据库里自然是不合适的,所以最好的办法是写在配置文件中,在程序第一次运行的时候加载到内存,以后用到的 ...

  9. bootstrap源码分析之tab(选项卡)

    实现tab选项卡的应用,此插件相对比较简单 源码文件: tab.js 实现原理 1.单击一个元素时,首先将原来高亮的元素取消2.然后给被单击元素进行高亮3.如果单击元素是下拉框中某个选项,则选中本身, ...

  10. Quill – 可以灵活自定义的开源的富文本编辑器

    Quill 的建立是为了解决现有的所见即所得(WYSIWYG)的编辑器本身就是所见即所得(指不能再扩张)的问题.如果编辑器不正是你想要的方式,这是很难或不可能对其进行自定义以满足您的需求. Quill ...