基于小程序自定义组件用户行为统计方案升级

C罗上一篇文章由小程序下用户行为统计的一个问题谈起讲述了在统计用户行为过程中遇到的小程序自定义组件导致的事件转发问题,及对原有统计方案的冲击。本文将着重跟大家分享,页面中存在多组件、组件嵌套使用等情况如何在较少的改动前提下兼容旧有的方案。
旧方案与自定义组件结合归根结底要解决的核心问题如下

  • 用户行为事件的捕获
  • 用户行为标签的抽取
  • 数据上报

如果能有效地解决以上问题,那么就可以与旧方案完美兼容。
先看下面2张图,图1是页面上未使用小程序自定义组件时的事件流模型,图2是应用自定义组件后的事件流模型。


图1:无自定义组件事件流图
图2:小程序自定义组件事件流图

乍一看,大哥,别逗我们了好吗?这么简单的dom事件模型也拿出来现眼,而且一样的图还绘制2遍?但这2张图是有很大的区别的,图1是正常的dom事件模型,在顶层容器上监听的事件具有全局把控性的,它通过事件对象清除地知道事件发生的target,并且能获取到dom节点的相应数据;而图2相较于图1的最大区别是,顶层容器收到的事件是通过最接近自己的自定义组件的shadow-root转发的,它只能知道该自定义组件中发生了自己监听的事件,但并不知道是自定组件中的具体哪个dom。

顶层容器代表2类老板:第1类老板,管理非常细致,每个人的任务进展情况都了如指掌,技术团队张三写了200行代码、李四写了300行代码全记在老板的小本本上;第2类老板,管理分层,听取技术leader的汇报,只知道技术团队一共产出500行代码,具体谁写了多少代码,交由技术leader去掌控。

但是,现在第2类老板心血来潮,想了解一下到底技术团队每个人的产出,该怎么办呢?技术leader拿出自己的小本本,张三200行代码、李四300行代码,详细地列出来发给老板,这样老板也就明白了,李四年底要多发500块奖金啦。

而我们要兼容旧方案的全局获取用户行为上报恰恰就像第2类老板,要详细知道真实发生事件的页面节点信息。


自定义数据上报兼容自定义组件的模型

一起来看看部分示例代码:

组件最外层代码

<view bindtap="triggerAnalysis" bindanalysis="handleAnalysis">
...
</view>

为了兼容组件嵌套,组件自身需要具备处理自定义上报的能力以及自己抛出自定义上报的能力,所以定义组件时需要定义好。

小程序自定义组件的behaviors

module.exports = Behavior({
    methods: {
        // 处理监听到自定义上报事件
        handleAnalysis(e) {
        },
        // 抛出自定义上报事件
        triggerAnalysis(e) {
        }
    }
})

为避免每个组件都要去冗余书写自定义上报相关的逻辑,这个行为是所有组件都需要具备的,在自定义组件构造函数的基础上扩展出一个适合项目的类。

const analysis = require('../behaviors/analysis')
const defaultBehaviors = [analysis]

const WSComponent = function (params) {
    if(Array.isArray(params.behaviors)){
        defaultBehaviors.forEach(item => {
            params.behaviors.push(item)
        })
    }else{
        params.behaviors = defaultBehaviors
    }
    return Component(params)
}

通过扩展后,构造的自定义组件会具备额外的默认行为,而这种编程习惯也是cluo比较推荐的,AOP的方式,从全局去统一处理某类问题。

回顾整个问题的梳理与解决,涉及以下知识点(包含但不限于)

  • Web Components
  • Shadow dom事件转发
  • 微信小程序自定义组件(包含组件行为)
  • AOP编程思路

知其然知其所以然,欢迎与前端C罗讨论,拒绝吐槽,欢迎打赏!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容