Mf175-用户注册功能-埋点敏捷方案
在不了解埋点系统的情况下,花了五六个小时 帮一位PM朋友做的方案。记录下来。以备后续参考
Mf178-用户注册功能-埋点敏捷方案
|
版本号 |
时间 |
撰写人 |
描述 |
|
V1.0 |
20190515-10:50:00 |
冰灵 |
初稿 |
|
V2.0 |
20190515-14:10:00 |
冰灵 |
与架构师WB进行沟通讨论了1.5h 最终对讨论结果进行整理 |
|
|
|
|
|
|
|
|
|
|
1. 需求背景
PM希望实现: 目前注册这块,有三个环节,每个环节有好几个输入框,他想知道 用户在向下操作的过程中不断流失的情况。

2. 埋点方案
基于考虑公司人力支持及成本的考虑,并没有必要实现一个大型的埋点系统,故提出一个快速敏捷方案
实现前端监控的步骤为:前端埋点和上报 -->数据处理 --> 数据分析
3. 埋点方案详情
3.1前端埋点和上报
每次输入框输入结束 可通过 JS的事件触发,去调后台记录一条信息到数据库
3.1.1触发时机:
① 是光标落下去的时候发送事件,还是填完了光标转移的时候发送事件,哪个更好呀??
因为目标就是为了知道有多少人输入到哪个框就不想填了还是填完以后发送事件更合适
② 目前设定的是 输入框结束,但是其实 觉得不是太确定,因为感觉用户在页面操作会有各种操作。不知道这个是否合理。你说的对,用户是会有各种操作比如可以先点最下面的框,最后输入最上面的
但是正常人都是从上往下的对吧。异常情况可以考虑但不用太过关注是不是
调研用户情况 小于1% 故当前无须特别处理
③ 讨论过程
WB:如果你想知道用户是具体填写到哪一个输入框的时候退出的,那就得再每一次他切换焦点的时候都去上报整个表单的内容才可以
WB:如果是说先记录下来,到最后他提交表单的时候统一去上报的话,如果他不填写完这个表单就退出了,你是没有办法知道他到底放弃在哪一个输入框
WB:还有要注意的一点就是每一次一定要把整个0表单的内容全都报上去,因为用户有可能不先填写第一条,而是先填写后面的
WB:每次上报整个表达的内容就可以知道这个用户在填写的时候的填写顺序
WB:在表单提交的时候,肯定还会有一次事件的上报,这一次就要小心一点,因为表单提交完,页面会立刻跳转,上报要在这个跳转之前做,不然这个上报请求是发不出去的
BL:这个方案的兼容性是非常好的,主要是 在想这种业务场景占比特别小。如果说我们为了兼容这个要做出比较多的操作的吧,收益是不划算的,所以有可能会做一些平衡和取舍。
WB:是的,所以这个事情我只是提一个比较通用的方案,具体的情况可能还要根据PM的需求以及实际你们想要花费的代价,来做一个权衡
3.1.2记录内容
这条记录的数据包括至少以下信息:
UserId 用户IP等(能标识一个未注册用户的唯一标识) IP+UA+pvid+ 一次注册操作的唯一标识 + 页面标识(基本信息,支付宝信息)+输入框标识(如 手机号,图形验证码等。。。)+datetime 日期时间
备注:
① UA:user agent 通过http头部信息取
② PVID
因为一个用户可能多次打开这个页面,需要有一个pvid,每次打开的时候,随机生成一个串就可以了,保证两次打开,这个串不同。如果这三个页面是一个流程,那也可以就 在第一个页面生成pvid,然后传递下去。(如果这三个页面是一个流程,那也可以像你说的,在第一个页面生成pvid,然后传递下去,这样做的前提是,一定不能跳过第一个页面直接进入第二个页面。一般用户也没法直接进行到第二个页面吧,理论上是这样,如果真的可以直接进入第二个页面,会对最终的数据产生干扰。)
③ 技术实现
实际生产数据
User-Agent:
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
其中IP+UA 可以兼并,不需要解析它用ip和ua组合取个摘要 可采用MD5
3.1.3上报频繁问题:
如果担心时间上报很频繁的话,客户端可以做计时的处理
比如他两次上报的间隔,如果不超过一秒钟,那就第二次就不要报,因为在一秒钟的时间,正常人是没有办法在输入框里填写一个有效的内容的
这策略可能还要根据你实际的用户量做一个权衡。
用户量调查:存量 10几万用户 增量 :每天几百个注册 故现阶段不作代码处理
3.2数据处理
3.2.1 定期后台批处理
以用户的一次注册行为 作为统计 根据统计场景 根据具体业务需要去重 统计各个输入框的总数,如果有时间需要,可以分析出一个用户的一次注册行为在每个框的耗时并记录到一张表
3.2.2 数据库or 文件 选型:
后端的话比较简单,用一个接口接受数据就可以了,可以看一下用户量,如果不大存在数据库也是可以的。
3.2.3 定期清理的替代方案:
如果长期统计需要关注 累积业务数据会越来越多。表设计可以设计为一张table_xx表和 table_xx_history表,其中table_xx 放业务数据,table_xx_history 放已作过数据分析的业务数据。
3.3数据分析
根据各个输入框的总数的递减可以手工绘制趋势图 分析 用户的各个框的流失情况。
根据 耗时记录信息,可以知道每个用户的具体时间长短。
3.4备注
- 统计信息以【一个用户一次注册操作】为分析对象。
- 记录的数据 根据需要进行更多的增加调整。
- JS触发调后台记录,要考虑好触发时机。
Mf175-用户注册功能-埋点敏捷方案的更多相关文章
- 如何巧妙地在基于 TCP Socket 的应用中实现用户注册功能?
通常,在基于TCP的应用中(比如我开源的GGTalk即时通信系统),当TCP连接建立之后,第一个请求就是登录请求,只有登录成功以后,服务器才会允许客户端进行其它性质的业务请求.但是,注册用户这个功能比 ...
- Web---创建Servlet的3种方式、简单的用户注册功能
说明: 创建Servlet的方式,在上篇博客中,已经用了方式1(实现Servlet接口),接下来本节讲的是另外2种方式. 上篇博客地址:http://blog.csdn.net/qq_26525215 ...
- 9、Django实战第9天:用户注册功能
今天完成的是用户注册功能... 首先把注册页面的前端文件register.html复制到templates目录下 编辑users.views.py,创建一个注册的类 class RegisterVie ...
- .NET MVC 4 实现用户注册功能
初学MVC,踩了不少坑,所以通过实现一个用户注册功能把近段时间学习到的知识梳理一遍,方便以后改进和查阅. 问题清单: l 为什么EF自动生成的表名后自动添加了s? l 如何为数据库初始化一些数据? l ...
- RandomAccessFile()实现用户注册功能, 新增,查询,更新
package seday03.raf;import java.io.IOException;import java.io.RandomAccessFile;import java.util.Arra ...
- JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能
使用Hibernate开发用户注册功能: 用户在register.jsp表单成功后,页面跳转到login.html,数据库中会存放用户注册的信息 <%@ page language=" ...
- JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能
使用c3p0与Dbutils开发用户注册功能: 用户在register.jsp表单成功后,页面跳转到login.html,数据库中会存放用户注册的信息 <%@ page language=&qu ...
- Django项目: 3.用户注册功能
本章内容的补充知识点 导入库的良好顺序: 1.系统库 2.django库 3.自己定义的库(第三方库) redis缓存数据库的数据调用速度快,但是不利于长时间保存. mysql用于长时间存储,但是调用 ...
- 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程
JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...
随机推荐
- [Vue] : 键盘修饰符
键盘修饰符以及自定义键盘修饰符 为文本框回车键绑定事件 <input type="text" class="form-control" v-model=& ...
- 微信内置浏览器不支持APK附件下载的原因
由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时点击下载按钮没反应,我想到的是做一个提示用户在浏览器中打开下载.其实原来很简单,就是判断当前是在微信内置浏览器中 ...
- java面试题,转载自http://www.cnblogs.com/nnngu/p/8471043.html#3914167
Java面试题库及答案解析 1.面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 2.面向对象编程有哪些特性? 封 ...
- Android-Glide使用
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Li_Qing_Xue/article/details/78919499 图片加载很是重要,我也对比过 ...
- 本地服务CURL请求本地另一个服务API返回超时/或无返回
入职之后一直在忙,终于有时间整理一波最近踩到的坑. 起因: 项目是微服务架构,一个项目对外提供API,新的项目调用API获得数据.于是就在本地搭建了两个服务.配置了两个虚拟域名,指向两个项目,当然我本 ...
- JS中map()与forEach()的用法
相同点: 1.都是循环遍历数组中的每一项 2.每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组) 3.匿名函数中的this都是指向window 4 ...
- 数据分析 - seaborn 模块
seaborn 模块 简述 对 matplotlib 模块进行了二次封装, 底层依旧使用还是 matplotlib 的, 但是在此基础上增加了很多的易用性模板, 更加方便使用 引用使用 import ...
- 浏览器输入url后发生的事情以及每步可以做的优化
首先总结下输入url按下回车后的大致流程: 查询url的ip地址. 建立tcp连接,连接服务器. 浏览器发起http/https请求. 服务器响应浏览器的请求. 网页的解析与渲染. 下面分析每个过程 ...
- .NET开发辅助工具-ANTS Performance Profiler【转载】
https://blog.csdn.net/Eye_cng/article/details/50274109
- Realm学习总结
参考博客: http://www.jianshu.com/p/096bec929f2a http://www.cnblogs.com/ilyy/p/5648051.html 参考的博客介绍很详细,我就 ...