智能小程序档案馆——埋点统计

栏目: JavaScript · 发布时间: 7年前

内容简介:埋点,又叫打点,俗话说:埋点要是埋得好,数据统计差不了。今天我们就和大家探讨一下如何进一步提升我们埋点的准确性~~数据的准确性和全面性对于智能小程序而言意义非凡:数据对于线上问题排查、性能优化、业务增长都起着至关重要的作用。 而作为小程序的开发者,是不是经常会遇到数据统计不准确的问题,数据就像是这个季节忽高忽低的温度,而每当数据统计出现问题,总能感觉老板在磨刀霍霍。。。智能小程序本身提供了自定义事件分析,可进行自定义事件埋点,但是在某些场景下需要进行特殊的埋点操作时,我们要怎么办呢?

埋点,又叫打点,俗话说:埋点要是埋得好,数据统计差不了。今天我们就和大家探讨一下如何进一步提升我们埋点的准确性~~

数据的准确性和全面性对于智能小程序而言意义非凡:数据对于线上问题排查、性能优化、业务增长都起着至关重要的作用。 而作为小程序的开发者,是不是经常会遇到数据统计不准确的问题,数据就像是这个季节忽高忽低的温度,而每当数据统计出现问题,总能感觉老板在磨刀霍霍。。。

智能小程序本身提供了自定义事件分析,可进行自定义事件埋点,但是在某些场景下需要进行特殊的埋点操作时,我们要怎么办呢?

swanId

由于我们宿主应用并不一定强制用户登录,因此用户也有可能处于未登录状态,用户肯定不希望被强行登陆,所以我们对用户设备的唯一标识解决方案是SwanId。

新版的 swan.getSwanId API在登陆前后都会返回同一个值。

UV的统计逻辑

UV指智能小程序的当天访问人数。

UV是当天SwanId去重之后的数字,统计UV的逻辑放在App的onShow中比较适合,先说一下这个函数触发的几个场景分别是:小程序首次被调起、小程序后台切前台。 下面我们实践一下:

App({
	onShow(options) {
		swan.getSwanId({
		    success: res => {
		        this.gloablData.uuid = res.data.swanid;
		    }
		});
		swan.request({
			url: 'https://host/path?query',
			data: {
				uid: this.gloablData.uuid
			},
			success() {
				// 这里是打点成功之后的操作
			},
			fail() {
				// 如果走到这里,说明失败了,可能是因为网络抖动的一些因素,那么我们把点存储在缓存,在退出小程序的时候再发送
				swan.setStorageSync('uid', this.gloablData.uuid);
			}
		});
	},
	onHide() {
		if (swan.getStorageSync('uid')) {
			// 如果缓存有uid,证明onShow的统计发送失败了,再次发送一次
			swan.request({
				url: 'https://host/path?query',
				data: {
					uid: this.gloablData.uuid
				},
				success() {
					// 发送成功后及时清除storage,也可以提升性能
					swan.setStorageSync('uid', '');
				}
			});
		}
	}
});
复制代码

PV的统计逻辑

PV 是指当天页面的访问次数。

好多人在这里翻车了,苦不堪言,导致加班到深夜查数据。简单还原下事故现场,有一些PV的统计参数需要从App的onLaunch或者onShow里通过异步请求(requestParams)获取,而真正发送PV打点(requestPageView)是在Page的生命周期里完成的,那么问题来了,requestParams的回调结果和requestPageView请求哪个在前哪个在后,很头疼对不对? 有人说在requestParams的回调里给globalData加一个flag标识,requestPageView的时候去判断一下,那这个时候有问题: 如果这个flag按照你得预期存在,万事大吉,如果不存在呢?setTImeout还是setInterval都不合适吧。 有没有解决的办法?of course!这里引入一个队列的概念,直接上代码,一目了然~~

app.js
App({
	onShow(options) {
		// mock requestParams
		swan.request({
			url: 'https://host/path?query',
			data: {
				path: options.path,
				query: options.query,
				scene: options.scene
			},
			success(result) {
				this.globalData.callBackArr.forEach(callBack => {
					// 此处遍历执行Page级生命周期的注册的App的回调函数
					callBack();
				});
			}
		});
	},
	globalData: {
        // 定义一个存储回调函数队列
        callBackArr: []
    }
});

// index.js
//获取应用实例
const app = getApp();
Page({
    data: {
        ...
    },
    onLoad: function () {
        app.onLoadCallback = data => {
           if (data != '') {
               // 可以在此处进行pv上报操作
           }
       }
       app.globalData.callBackArr.push(app.onLoadCallback);
    },
    onShow: function () {
        app.swanCallback = data => {
            if (data != '') {
                // 可以在此处进行pv上报操作
            }
        }
        app.globalData.callBackArr.push(app.swanCallback);
    }
})
复制代码

关于转化率

最近很多开发者反馈说转化率降低,而且一降就是50%,为啥会有这么大的gap?难道是用户一夜之间就变心了?心中充满自责,是我们的产品不好用了还是用户转移到其他竟品小程序了?冰冻三尺非一日之寒,况且我们也没有太大的改动,还是再看看代码逻辑吧~~

看了代码之后我们会发现,在点击支付会跳转到支付页面,而当前待支付的页面的PV上报在onLoad里,导致支付完成后会再次跳转到当前的待支付页面,导致又一次触发了onShow,pv++,转化率 = 支付pv/待支付pv,相当于待支付PV加了一倍,整体降低50%。

关于转化率的计算的逻辑尽量都放在onLoad生命周期中处理,避免出现中间页跳转(支付页面)影响最终PV

关于用户停留时长

即用户在某一个页面的停留时长。

埋点是应该考虑在起点页面渲染完成,终点用户离开这个页面,示例如下:arrow_down::

Page({
	data: {
		startTime: 0
	},
	onReady() {
		this.setData({
			startTime: Date.now()
		});
	},
	onHide() {
		let lengthOfStay = Date.now() - this.data.startTime;
		swan.request({
			url: 'https://host/path?query',
			data: {
				pageFlag: 'page/index/index',
				lengthOfStay: lengthOfStay
			}
		});
	}
});
复制代码

新访问的用户数

针对新增用户数我们需要借助SwanId,在后台数据库里对SwanId进行过滤,对于数据库路没有的SwanId则记做一个新的用户即可。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Security, Privacy and Commerce, 2nd Edition

Web Security, Privacy and Commerce, 2nd Edition

Simson Garfinkel / O'Reilly Media / 2002-01-15 / USD 44.95

Since the first edition of this classic reference was published, World Wide Web use has exploded and e-commerce has become a daily part of business and personal life. As Web use has grown, so have ......一起来看看 《Web Security, Privacy and Commerce, 2nd Edition》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具