摘要: 经过分析用户的行为,才想获得为何会出现这种状况!前端
前两天在BearyChat收到这样的一个报警消息:数据库
409 ?Conflict ? 平时不多遇到这样的错误,貌似很严重的样子,吓得我赶忙查看到底发生了什么。编程
仔细查看错误详情发现是由于使用同一个邮箱帐号屡次注册致使后面的请求数据库直接报错。小程序
可是,不该该啊!咱们是事先有作检查的。若是该邮箱已经被注册,会提醒而且不让注册的。难道对方直接调用API发请求?若是是这样那就更加危险了,咱们已经被盯上了!微信小程序
但是这样作也没什么好处啊,而且IP显示为国内地址,若是真的好歹用国外的地址吧。想了想,仍是仔细分析到底出了什么问题吧。微信
再往下一看,发现本身彻底是多想了,下面的用户行为就把他给彻底暴露了!网络
这些用户行为记录默认按照倒序排列,咱们能够从下往上一条条看用户的使用轨迹。经过用户行为能够得知出错前的整个操做流程:异步
那么问题来了:有没有什么异常的行为? 答:有!他点击了建立团队两次。优化
凭着我敏锐的嗅觉意识到多是因为用户快速点击"建立团队"按钮两次致使。经过时间记录发现第一次点击是在1.86m,第二次在1.87m。也就是说:用户在很短的时间内快速点击了两次。网站
刚刚的用户行为记录过滤了网络请求,接下里咱们结合网络请求一块儿分析:
能够发现有两个/members/email
的GET请求,而且都成功返回404,这里代码的意思是指该邮箱还没有被注册,能够被使用。一个/members/create
请求成功返回200,表示帐户建立成功。最后报错的/members/create
请求失败返回409。
到这里基本肯定出错缘由就是因为用户快速点击建立团队致使。
有没有这种可能呢,尝试复现一下看看呗!因而,我打开了注册页面,输入邮箱和密码,而后以超快的手速点击建立团队N次。哈哈哈哈,不出所料,被我成功复现了!
只要可以成功复现,这个BUG基本上就算被解决了,接下来就是去分析如何优化代码防止出现这种状况了。有两个思路:1. 用户点击以后,设置被点击的按钮无效直到点击请求彻底被处理;2. 将验证邮箱是否存在的和建立团队两个异步事件想办法合并为一个原子操做。综合考虑,决定使用第一种方案。由于实现简单,对现有代码改动不大。
总的来讲:当在没有堆栈信息或者报错信息难以理解的时候,Fundebug记录的用户行为真的颇有用。五星推荐前端开发接入到项目中!
Fundebug专一于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对一、微脉、青团社等众多知名企业。欢迎你们免费试用!
转载时请注明做者Fundebug以及本文地址: