前几天在简书上看了一篇,关于用插桩的方式做android端数据埋点的方案,该方案不用修改源码就可以实现数据采集,非常方便,侵入性也极低。由此我想到了Vue前端开发中是不是也可以采用这样的方案,只是android插桩修改的是class文件,而Vue修改的是.vue文件,实现起来比android端更加简单。
插桩:插桩就是在代码中插入一段我们自定义的代码
技术点
- webpack
- vue
- 正则表达式
实现步骤
在vue开发中一般都会用webpack作为打包工具。我这里的实现也是基于webpack loader来动态修改.vue文件来插入埋点的代码。以下是关键代码部分介绍,具体的请自行查看源码。
实现一个webpack loader
该webpack loader主要功能:
- 寻找@click字符串,匹配到具体的点击事件调用函数,在函数中插入
this.$monitor.onClick(this);
- 寻找created字符串,匹配到具体的初始化调用函数,在函数中插入
this.$monitor.onCreate(this);
- 寻找destroyed字符串,匹配到具体的销毁函数,在函数钟插入
this.$monitor.onDestroy(this);
|
|
数据采集监听
当有点击、页面创建、页面销毁事件产生的时候,就会相应的方法进行数据处理,最终调用Vue.prototype.$monitor.onEvent
方法,我们只需要在工程中引入该js文件,并实现Vue.prototype.$monitor.onEvent
方法即可。
收集到的数据有:事件类型、产生事件的页面路由、调用方法名称、页面停留时间
|
|
Vue工程webpack引入loader
在调试环境下可以通过软链接的方式,在node_mouldes中新建一个软链接data-collection-loader指向data-collection-loader开发工程的位置,即可在webpack配置文件中直接使用data-collection-loader。
|
|
Vue工程引入monitor文件
|
|
闲扯几句
- 在原生端和H5端甚至后端开发中,很多技术点方案是可以互相借鉴的。
- 这周买了个体脂秤,测量了下身体的各个参数指标,居然发现身体蛋白质含量超标,可能是平时牛奶和鸡蛋吃多啦,亏的我一直以为自己平时吃得没什么营养,强迫自己吃很多高蛋白的东西。
- 下周要开始早晚锻炼啦,最近一直在加班,感觉体脂明显高了。