神策的基本事件模型包括事件(Event)和用户(User)两个;比如说要统计今天注册了tcl会员小程序的人数。区分是注册事件还是别的事件,用到了事件的模型。每个用户启动N次只能算一次,用到了用户的模型。

埋点代码的基本思路

埋点代码的基本思路和‘追踪某个用户的某个行为’这件事的描述是一样的。首先建立一个人物模型,然后追踪这个人物的行为。这个先后顺序在代码中的体现:

// 通过id标识建立一个用户模型

sensors.login(id)

// 给这个模型完善描述信息

setProfile({

sex: '男',

city: '深圳',

})

// 用户触发了注册动作时这里会执行

register() {

sensors.track('register', {

title: '首页',

share_mobile: 13590035000,

time: '2020-03-13 16:00:00'

})

}

复制代码

前端埋点代码的设计案例

接到一个需求,所有的页面都要采集页面的切换动作,比如当前页面停留的时间,下个页面的路径,标题。重点是所有页面

痛点和难点

写代码之前,先思考下蒙头写代码会带来哪些痛点。而认识并且规避掉这些痛点,就是接下来的要做的事情和思路

1: 埋点代码不是主流的业务逻辑,如果和业务逻辑糅合在一起,会非常的乱,长期的需求迭代和多人协作会导致维护代码的时候非常困难

2: 涉及的所有的页面,每个页面都要写相应动作的埋点代码,有N个页面就会在N个页面写一遍,迭代修改的时候同一个埋点的需求也要改N遍

3: 埋点的动作次数很多,代码量会很大

4: 涉及的所有的页面,如果都在每个页面上写,容易漏写

而这些问题,神策源码其实也遇到过,所以可以参考下神策源码的思路,解决这些痛点。

神策源码是怎么解决的

看了半天神策源码,终于发现了关键所在:

var oldApp = App;

App = function(option) {

mp_proxy(option, "onLaunch", 'appLaunch');

mp_proxy(option, "onShow", 'appShow');

mp_proxy(option, "onHide", 'appHide');

oldApp.apply(this, arguments);

};

var oldPage = Page;

Page = function(option) {

mp_proxy(option, "onLoad", 'pageLoad');

mp_proxy(option, "onShow", 'pageShow');

if (typeof option.onShareAppMessage === 'function') {

sa.autoTrackCustom.pageShare(option);

}

oldPage.apply(this, arguments);

};

复制代码

源码是劫持了微信小程序提供的App, Page函数,然后往里面添加埋点代码,而启动小程序,App函数必然会执行,加载某个页面,Page函数必然会执行,这样预设的埋点代码就在App函数和Page函数执行的时候静默的执行了

劫持了App,Page函数解决了N个页面要写N遍的问题。劫持了App,Page函数,可以实现‘一键埋点’,N个页面只要写一遍就可以了。

虽然劫持了App,Page函数,但是还是有一些问题。

1:无法解决按需埋点,比如说有些页面需要埋,有些页面不需要

2:代码过于集成,会导致不同的埋点需求的代码糅合在一起,埋点代码和埋点代码之间的混乱。

集成和分离举个例子,比如说造一个机器,如果是集成的,机器的某一个地方坏了,可能会导致整个机器都不能用。而分离是把机器拆分成很多个零件模块,零件坏了可以单独修换。

这时候我想到了vue中常常使用的mixins的技巧(混入、有策略性的合并或者继承)可以解决代码复用,抽离的问题。来看看mixins的一个例子:

const mixins = {

// 页面的变量

data: {

apple: 0,

banner: 1,

cat: 3

},

// 页面显示会触发这个函数

onShow() {

console.log('mixins')

},

// 自定义方法1

method1() {

console.log('mixins method1')

},

// 自定义方法2

method2() {

console.log('mixins method2')

}

}

export default {

mixins: [

mixins

],

// 页面的变量

data: {

apple: 100,

},

// 页面显示会触发这个函数

onShow() {

console.log('origin')

},

// 自定义方法1

method1() {

console.log('origin method1')

},

}

复制代码

最终会合并成:

export default {

// 页面的变量

data: {

apple: 100,

banner: 1,

cat: 3

},

// 页面显示会触发这个函数

onShow() {

console.log('mixins')

console.log('origin')

},

// 自定义方法1

method1() {

console.log('origin method1')

},

// 自定义方法2

method2() {

console.log('mixins method2')

}

}

复制代码

so入口处劫持Page函数,在需要埋点的时机比如onShow这个时机用mixins静默注入埋点的代码。

这样就可以不影响到业务代码的情况下,实现业务逻辑和埋点逻辑的分离,不同需求的埋点逻辑的分离,同时支持了集成和按需。 并且可以”一键埋点”。

然后剩下的事件就变成劫持App,Page函数,写一个小程序版的mixins扩展,把不同的埋点需求拆分一个单独的模块,既可以一键集成,又可以按需使用。

前后对比

没改造之前:

// N个这样的页面

Page({

onShow() {

// 业务逻辑

getData().then((res) => {

if (res.data && res.data.code === 1) {

const data = res.data.data

for (let i = 0; i < data.length; i++) {

console.log(i)

}

}

})

// 埋点代码

const title = getTitle()

const url = getUrl()

sensors.track('login', {

title,

url

})

}

})

复制代码

改造后的一键埋点:

// 入口app.js,只要引入一次,所有的页面都不用单独写

import './sensors/one-key.js'

复制代码

// 零侵入业务逻辑

Page({

onShow() {

// 业务逻辑

getData().then((res) => {

if (res.data && res.data.code === 1) {

const data = res.data.data

for (let i = 0; i < data.length; i++) {

console.log(i)

}

}

})

}

})

复制代码

改造后的按需埋点:

import mixins from './sensors/mixins.js'

// 同样零侵入业务逻辑

Page({

// 按需埋点的插槽

mixins: [

mixins

],

onShow() {

// 业务逻辑

getData().then((res) => {

if (res.data && res.data.code === 1) {

const data = res.data.data

for (let i = 0; i < data.length; i++) {

console.log(i)

}

}

})

}

})

复制代码

总结

劫持App,Page函数在小程序中非常有用,可以集成扩展功能。

而mixins是非常好用和通用的写代码技巧,不仅仅是在埋点的逻辑,在业务逻辑上同样非常好用。复制代码

h5 神策埋点_神策埋点思路相关推荐

  1. 埋点 神策小程序_神策埋点思路

    数据模型的建立 神策的基本事件模型包括事件(Event)和用户(User)两个:比如说要统计今天注册了tcl会员小程序的人数.区分是注册事件还是别的事件,用到了事件的模型.每个用户启动N次只能算一次, ...

  2. python 埋点_数据埋点方案简述

    数据是机器学习的前提,前面使用Python爬虫抓取数据篇介绍了通过爬虫抓取网页的方式采集数据.对于新产品,最重要的事项是获取用户,参看前面互联网产品怎么发掘种子用户和意见领袖 这篇. 在产品上线之后, ...

  3. h5 神策埋点_神策Android全埋点方案分析

    神策Android全埋点方案 原理简单分析: Activity生命周期通过监听Application.ActivityLifecycleCallbacks,fragment的生命周期 及一些点击事件则 ...

  4. h5 神策埋点_咕咚技术总监唐平麟:神策使我们的数据平台成本降低约 75%,迭代效率提升 2~3 倍...

    在这个数据爆炸的时代,数据成为各行各业出奇制胜的法宝,运动行业也不例外,那么大数据对运动业有什么价值呢? 咕咚作为智能运动的倡导者和先行者,致力于成为全球领先的运动大数据和服务平台,现已为超过 1.5 ...

  5. h5 神策埋点_数据分析(一)埋点

    1.     埋点是什么? 埋点是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获.处理和发送的相关技术及其实施过程.比如用户某个按钮点击次数.浏览某个一刻吗时长 ...

  6. h5 神策埋点_使用神策数据设置埋点

    使用神策数据设置埋点埋点介绍神策数据介绍demo 埋点介绍 埋点就是收集页面的浏览的记录,例如点击某个按钮的次数,搜索某个关键字的次数等 神策数据介绍 介绍:神策数据主要围绕用户行为分析,为用户完成数 ...

  7. 埋点 神策小程序_第9讲. 神策数据获3000万美元 C+ 轮融资,A、B、C 轮资方全部跟投!...

    5月19日,神策数据 5 周年产品暨融资线上发布会正式召开.神策数据创始人 & CEO 桑文锋在发布会上宣布重磅融资信息,即获得由襄禾资本领投,晨兴资本.DCM 资本.华平投资.红杉资本中国基 ...

  8. 神策数据 App 可视化全埋点 2.0 重磅升级!抢先体验

    伴随着大数据计算能力的软硬件环境成熟,国内大部分企业的数据意识在逐渐提升,寄希望于数据高效应用,基于数据驱动的力量推动决策落地.在这个过程中,数据采集作为数据应用的起点,其重要性不言而喻. 目前,神策 ...

  9. 数据埋点之神策全埋点总结

    数据埋点之神策埋点总结 项目介绍: 一. 准备阶段 二. 埋点方案设计--全埋点 三. 埋点方案设计--代码埋点 项目介绍: 项目简介:本人就职于某互联网初创公司,公司主要APP是服装领域S2B的某服 ...

  10. 前端埋点的缺点_【埋点学习埋点质量】埋点的框架设计及其准确性

    是新朋友吗?记得先点蓝字关注我哦- 通过前两章<送你一份埋点需求分析&设计埋点方案><一份规范的埋点需求文档该如何写?>,我们已经足够了解埋点,并且能够输出埋点文档了. ...

最新文章

  1. iOS原生如何加载HTML中img标签的图片
  2. 【周末阅读】工业互联网的发展历程及实现路径
  3. Android实现模块 api 化
  4. 用户在购买机器之后不知如何正确保养笔记本电脑
  5. VMware虚拟机中VMnet0上的网桥当前未运行
  6. 【每周CV论文推荐】 初学深度学习单张图像三维人脸重建需要读的文章
  7. 洛谷 U5122 T2-power of 2(费马小定理)
  8. 如何5分钟秒懂Java之基础入门篇 第一个hello word
  9. 14张思维导图带你系统学习Python核心知识
  10. 吝啬的国度 ---用vector 来构图
  11. C++中使用空格的建议
  12. 传智播客Java 关键字,标识符,注释
  13. cad添加自己线性_如何自定义自己需要的CAD线型?
  14. linux hping3命令,系列H - hping3 - 测试网络及主机的安全 - 《Linux命令大全》 - 技术池(jishuchi.com)...
  15. js 获取浏览器 滚动的高度
  16. 计算机导论知识体系,《计算机导论》课程知识体系结构研究
  17. 项目管理工具——5W1H分析法
  18. 软件版本 —— Alpha、Beta、RC版本的区别
  19. python except exception_Python 获取异常(Exception)信息的几种方法
  20. C++ Primer Plus习题及答案-第五章

热门文章

  1. spring boot+thymeleaf+layui实现后台管理系统界面
  2. 【计算机网络】 2019年-中国计算机学会推荐国际学术会议和期刊目录(二)
  3. python红色的颜色表达式_python – 排序(十六进制)颜色以匹配彩虹
  4. 360一键root工具 v5.1.3 pc绿色版
  5. 匿名方法和Lambda表达式
  6. 重启计算机网络连接巨慢,开机后宽带连接很慢怎么办 开机后宽带连接很慢的三步解决办法...
  7. windows怎样让宽带自动连接
  8. UIKit框架的介绍
  9. 开启使用SPR Batch 问题记录
  10. 接入物流快递单号自动识别查询接口API