什么是埋点?  综合    vue埋点

埋点分析,是网站分析的一种常用的数据采集方法。数据埋点分为初级、中级、高级三种方式。数据埋点是一种良好的私有化部署数据采集方式。

埋点技术如何采集数据,有何优缺点?
数据埋点分为初级、中级、高级三种方式,分别为:

  • 初级:在产品、服务转化关键点植入统计代码,据其独立ID确保数据采集不重复(如购买按钮点击率);
  • 中级:植入多段代码,追踪用户在平台每个界面上的系列行为,事件之间相互独立(如打开商品详情页——选择商品型号——加入购物车——下订单——购买完成);
  • 高级:联合公司工程、ETL采集分析用户全量行为,建立用户画像,还原用户行为模型,作为产品分析、优化的基础。

无疑,数据埋点是一种良好的私有化部署数据采集方式。数据采集准确,满足了企业去粗取精,实现产品、服务快速优化迭代的需求。

但,因手动埋点工程量极大,且一不小心容易出错,成为很多工程师的痛。且其开发周期长,耗时费力。无痕埋点成为市场新宠。

什么是无痕埋点

首先介绍一下传统埋点存在的问题

  • 数据质量(埋错、漏埋)
  • 开发成本 (需要统计每个事件的点击,页面的展现pv uv)
无痕埋点就是为了解决这两个问题,一行代码完成统计,无遗漏。
下面先介绍一下本公司vue实现埋点插件
   function leStatic(actiontype, pagetype='',backup = {}){
...
...
}; Vue.prototype.$log = leStatic;

将埋点方法注册到vue实例下;我们就可以使用 this.$log()来调用这个方法了,每调用一次这个方法就会埋上一个埋点;

铺垫完成,接下来该开始我们的表演了

1、我们的无痕埋点能做什么?

* 统计所有页面内事件的点击量
* 统计页面的展现量pv uv

2、怎么应用?

应用很简单,只需要引入封装的方法(Buried),并应用在methods即可

import { Buried } from '@/libs/decorators';

@Buried
methods: {
...
}

3、需要注意什么?

  • 此方法不局限在methods上是使用,只要是在单文件导出对象一级子对象下均可;
  @Buried
components: {}

但是考虑到语义更加清晰建议在methods上使用此方法。

  • 考虑到并不是所有的方法都需要设置埋点,所以如果某方法不想设置埋点 可以 return 'noBuried' 即可忽略此方法不设埋点。

  • 页面展现量统计在钩子函数中 (activated - created - mounted) 这三个钩子内,所以页面内至少有这个三个钩子之一才可统计页面展现量。

4、话不多说,先上代码?

/**
* @description 全埋点
* 1.在所有methods方法中埋点为函数名
* 2.在钩子函数中 (activated - created - mounted) 依次寻找这三个钩子
* 如果存在就会增加埋点 VIEW
*
* 用法:
* @Buried
* 在单文件导出对象一级子对象下;
* 如果某方法不想设置埋点 可以 return 'noBuried' 即可
*/
export function Buried(target, funcName, descriptor) {
let oriMethods = Object.assign({},target.methods),
oriTarget = Object.assign({},target);
// methods方法中
if(target.methods) {
for(let name in target.methods) {
target.methods[name] = function () {
let result = oriMethods[name].call(this,...arguments);
// 如果方法中返回 noBuried 则不添加埋点
if(typeof result === 'string' && result.includes('noBuried')) {
console.log(name + '方法设置不添加埋点');
} else if(result instanceof Promise) {
result.then(res => {
if(typeof res === 'string' && res.includes('noBuried')) { console.log(name + '方法设置不添加埋点'); return; };
console.log('添加埋点在methods方法中:' , name.toUpperCase ());
this.$log(name);
});
}else{
console.log('添加埋点在methods方法中:' , name.toUpperCase ());
this.$log(name);
};
return result;
}
}
}
// 钩子函数中
const hookFun = (funName) => {
target[funName] = function() {
let result = oriTarget[funName].call(this,...arguments);
console.log('添加埋点,在钩子函数' + funName + '中:', 'VIEW');
this.$log('VIEW');
return result;
}
}
// 钩子函数中 view
if (target.activated) {
return hookFun('activated');
} else if (target.created) {
return hookFun('created');
} else if (target.mounted) {
return hookFun('mounted');
};
}

作者:Victor细节
链接:https://www.jianshu.com/p/467544cb088e

Vue前端数据采集 埋点 追踪用户系列行为的更多相关文章

  1. 循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理

    在前面随笔介绍了ABP+Vue前后端的整合处理,包括介绍了ABP的后端设计,以及前端对ABP接口API的ES6的封装,通过JS的继承类处理,极大减少了重复臃肿的代码,可以简化对后端API接口的封装,而 ...

  2. 循序渐进VUE+Element 前端应用开发(19)--- 后端查询接口和Vue前端的整合

    循序渐进VUE+Element 前端应用开发的系列文章中,前面介绍了系统各个功能的处理实现,本篇随笔从一个主线上介绍前后端开发的整合,让我们从ABP框架后端的查询接口的处理,前端API接口调用的封装, ...

  3. 四、vue前端路由(轻松入门vue)

    轻松入门vue系列 Vue前端路由 七.Vue前端路由 1. 路由的基本概念与原理 后端路由 前端路由 实现简单的前端路由 vue-router基本概念 2. vue-router的基本使用 基本使用 ...

  4. vue 前端框架 (三)

    VUE 生命周期 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  5. Vue前端访问控制方案

    1.前端访问控制的常规处理方法   前端访问控制,一般针对界面元素dom element进行可见属性或enable属性进行控制,有权限的,相关元素可见或使能:没权限的,相关元素不可见或失能.这样用户可 ...

  6. Vue 前端权限控制的优化改进版

    1.前言   之前<Vue前端访问控制方案 >一文中提出,使用class="permissions"结合元素id来标识权限控制相关的dom元素,并通过公共方法check ...

  7. 在Vue前端项目中,附件展示的自定义组件开发

    在Vue前端界面中,自定义组件很重要,也很方便,我们一般是把一些通用的界面模块进行拆分,创建自己的自定义组件,这样操作可以大大降低页面的代码量,以及提高功能模块的开发效率,本篇随笔继续介绍在Vue&a ...

  8. Vue 前端配置多级目录实践(基于Nginx配置方式)

    前情提要 有阵子没更新博客了,因为快年结了工作比较多,这不,最近公司的对外演示环境出现问题这个活儿也落到了我的头上-- 事情是这样的,原来演示环境有很多服务,每个服务都是对外单独开一个端口,比如 ht ...

  9. vue 前端框架 目录

    vue 前端框架 目录   vue-目录 ES6基础语法 vue基础语法 Vue.js的组件化思想 —上 Vue.js的组件化思想 —下 Vue + Vue-Router结合开发 SublimeSer ...

随机推荐

  1. ES6系列_15之class类的使用

    JS语言的传统方法是通过构造函数,定义并生成新对象,是一种基于原型的面向对象系统.在ES6中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象.1.先来看看es5与es ...

  2. django 短链接改成长连接

    from django.conf import settings from django.core.wsgi import get_wsgi_application from gunicorn.app ...

  3. c++ new 与malloc有什么区别

    前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题.当时我回答new从自由存储区上分配内存,malloc从堆上分配内存:new/de ...

  4. 基于Spring Boot和Spring Cloud实现微服务架构学习

    转载自:http://blog.csdn.net/enweitech/article/details/52582918 看了几周Spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习感 ...

  5. centos7.3 防火墙设置

    1.查看firewall服务状态 systemctl status firewalld 2.查看firewall的状态 firewall-cmd --state 3.开启.重启.关闭.firewall ...

  6. 话说C# 6.0之后

    最想看到的:1. 加入脚本语言支持,可以解释运行,作为程序的二次开发语言(类似于vba,python).2. 可以自定义运算符,为了安全起见,自定义运算符应该特别予以说明(类似于数学表达式,多样式的运 ...

  7. 2015年传智播客JavaEE 第168期就业班视频教程day45-ERP项目-01 05-主线流程

    采购管理 销售管理 采购退货管理  销售退货管理 老师的采购单的审核是分三级审核的,如果这个单子是个普通单子,那么审核一下就完了,如果这个单子超过100万,需要二级领导审核,如果这个单子超过500万, ...

  8. mybatis sql语句等日志打印

    加settings <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration ...

  9. Yii2 windows 安装步骤

    安装 Yii2 高级版应用 基础版可以看官方文档 今天安装了YII2高级版应用 写下步骤 留个记号,以备查询! 在 Windows 中,你首先需要下载并运行 Composer-Setup.exe 查看 ...

  10. CMDB之数据采集

    一. 四种方式 1. Agent方式 api - URL - 发送数据格式 - 返回值 agent - 采集数据,发送数据 好处: - 简单 - 采集速度快,响应速度快 坏处: - 每台agent装的 ...