有一种八阿哥(Bug),叫“在我电脑上是好的呀”。

有一种解决方式,叫“你去好好排查一下你自己的代码”。

有一种控诉,叫“这绝不是后端的问题”。

你能忍吗?我不能忍,为这事,我可没少跟同事撕逼,可是有什么用吗? 最后我想,这事儿也许不怪别人,怪就怪我无法直接证明这些bug不是我的。今天我们就来说说有哪些难搞的线上问题,该如何去定位,并解决它。

但是,解决线上的问题,不是看你会什么,而是看你有什么?

==========================================

【前端监控系统】 Github地址;只需要简单几步,就可以搭建一套属于自己的前端监控系统。

==========================================

一、白屏 - 前端小伙伴的噩梦

页面白屏了,这对前端小伙伴来说,是最严重的bug了,因为业务因此瘫痪了,哪怕不是你的锅,你也背定了。于是,你对着一张白屏,心急如焚,却一脸懵逼,因为你什么有用的信息都没有,解决起来真的无从着手。那么导致白屏的原因有哪些呢?

  1. 很遗憾,确实是你的JS报错了,运行时抛出异常,导致白屏。

  2. 静态资源加载失败,如:js、css文件加载失败,导致白屏。

以上两点是导致前端白屏的主要原因,当然你说还有什么机子兼容性不好太卡,网络异常什么的,那都小概率事件,属于前端监控的另一个维度,我们在这里就不说了,以后说。

从上边两张图可以看出,如果你知道了用户在某个时间做了某个动作之后,发生了错误,解决起来,也就易如反掌了。

二、接口报错 - 如何优雅的甩给后端

可能有人会认为接口的报错应该由后台来关注,统计,并修复。 确实如此,而且后台服务有了很多成熟完善的统计工具,完全能够应对大部分的异常情况, 那么为什么还需要前端来解决接口问题呢。原因很简单,因为前端是bug的第一发现位置,他们肯定会先找到你,那么在你帮后台背锅之前怎么快速优雅的"甩锅"呢?

我们公司的后台可是有着完善的监控系统,他们都觉得自己的代码和监控都做得非常完善,但是从我的监控结果来看,事实并非如此。当然,你也许会说这是开发和测试不专业,这么明显的问题都没有发现,但是,我只能用一句话来解释:人非圣贤。与其追究是谁的责任,不如想办法解决问题。将线上的损失减少到最低。


同样道理,如果你把下边这张截图发给你们的后台小伙伴,你还需要跟他们争论是谁的锅吗?当然,如果是你自己的锅,你还是赶紧偷偷修改掉吧,别跑去丢人了,哈哈。

三、网络问题 - 用户的锅

网络是跟用户体验密切相关的因素,但却是开发小伙伴无能为力的因素,因为这取决于用户当时的网络环境是否良好。如果我们能够判断出用户当时的网络情况,对我们排查问题也是很有帮助的。

首先,网络环境对页面首次加载影响最明显。 理论上讲,我们是无法,或者说不方便把用户当时的网络情况计算出来,但是我们可以侧面评估出用户当时的网络环境。虽然我们测不出来网速,但是我们可以计算出用户首次加载页面的时间,以此来评估用户的网络环境。

其次,网络环境影响接口的效率。你也许会说,如果网络环境不好,我们只要等待足够长的时间,接口啥的总是能够加载出来的,但是线上用户使用app的时候都会有个极限等待时间。也就是说用户等待到一定时间,就会变得不耐烦了,就会杀掉你的程序,流失用户。所以,我们一定要在到达用户极限等待时间之前,给用户一个反馈,这就是为什么我们需要给前端接口加一个超时时间。

如果,网络环境评估良好,而接口请求耗时又很长,这时候你就可以去找后端的小伙伴算账了。

四、CDN报错 - 替第三方公司背锅

好吧,最憋屈的一种线上Bug,就是替第三方公司背锅啦。如果是第三方的东西出了问题,上头永远都只怀疑是你的代码有bug,如果你没有有力的证据,即使你已经排查过了,他们也只会说一句“你再去好好排查一下你自己的代码”,这时候是不是有一键盘呼他脸上的冲动。

于是,我一怒之下,在监控系统里加入了对静态资源的监控功能。前不久,阿里部分区域的出现了5分钟无法访问的情况。我们线上群里顿时就炸开了锅,让我赶紧排查问题。我打开了错误监控,发现只有静态资源报错陡然飙升。在群里轻轻的说了一句,是CDN有问题,果然,不一会儿,CDN就发了公告了。我转头看向窗外,轻轻地吐了一口气,天上的云静静的飘着,此时此刻只有我自己知道,我再也不用替你背锅了。

五、前端代码错误 - 这才是自己的锅

别人的锅都甩给他们了,剩下咱来聊聊自己的锅。正常情况下,线上前端代码出现错误的可能行比较小,因为经过细心的测试,前端代码错误是很容暴露出来的。另外,咱自己的锅,咱自己清楚,加上我做了一个非常细致的错误分析,问题解决起来也是得心应手

总结:造成线上问题的因素有很多,代码错误仅仅是其中一个很小的因素。我们如何在这众多繁杂的因素之中找到真正原因,就需要有意见趁手的工具。我开发使用前端监控系统到现在,最深的感触是:“这个监控系统并不是帮我解决了很多问题,而是能够告诉我那些问题我不能解决”,这就足以让我从现实的困境中解脱出来。所谓,工欲善其事必先利其器,说得可能就是这个意思吧。

=================================

怎么解决前端线上Bug的更多相关文章

  1. ××校招:前端线上笔试题--页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动

    题目: 请让页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动:   原理: 1.页面上画一个圆,画一个圆心.在这个圆的圆周上面画一个点,我们就让这个点绕着圆周跑: 2.怎 ...

  2. 使用chrome调试前端线上代码

    家都知道在前端开发过程中,为加快网站静态资源加载速度都会对js/css等静态资源进行压缩合并再部署到生产环境,而在实际开发过程中开发人员一般都是在开发环境进行源码文件开发调试的,当部署平台或部署人员将 ...

  3. 听说”双11”是这么解决线上bug的

    听说"双11"是这么解决线上bug的 --Android线上热修复的使用与原理 预备知识和开发环境 Android NDK编程 AndFix浅析 Android线上热修复的原理大同 ...

  4. 线上BUG:MySQL死锁分析实战

    原文链接:线上BUG:MySQL死锁分析实战 1 线上告警 我们不需要关注截图中得其他信息,只要能看到打印得org.springframework.dao.DeadlockLoserDataAcces ...

  5. 线上bug的解决方案--带来的全新架构设计

    缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... ...

  6. 程序员如何描述清楚线上bug

    案例 一个管理后台的bug,把操作记录中的操作员姓名,写成了该操作员的id.原因是修改了一个返回操作人姓名的函数,返回了操作人的id.但是还有其他地方也用这个函数,导致其他地方把姓名字段填写成了操作员 ...

  7. 线上bug分析

    昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户 ...

  8. 记一次解决tomcat自动关闭的bug

    最近一个运行了4年的javaee web项目,经常接到客户反馈系统无法打开.登录服务器查看服务,发现是tomcat自动关闭了.基本是3到4天发生一次. 运维人员开始以为是其他服务杀死了tomcat服务 ...

  9. 线上bug或故障界定及填写规范

    [线上故障与线上Bug界定] 一.线上故障: 1.  故障参照公司规范稍做调整: a)         1级故障:资讯首页或主App首页无法打开:多条业务线同时不可用:超过15分钟: b)       ...

随机推荐

  1. 创建、查看、删除计划任务at命令举例

    1.三天后的下午 5 点执行 /bin/ls : at 5pm + 3 days at> /bin/ls             结束按ctrl+d 查看计划任务:at -l 之后 at -c ...

  2. CPU中断的工作原理,从最底层讲起

    前言 中断的概念属于硬件层.虽然我们在进行软件编程时不会直接使用中断,但理解它对我们来说依然重要. 我们在使用线程切换及状态管理.异常处理.硬件与处理器的交互.I/O操作等指令时,中断都在默默的为我们 ...

  3. 请简述get请求和post请求的区别

    ①get比post快 ②get体积小,post可以无限大 ③get在浏览器退回时无害,post会再次请求 ④get的url参数可见,post不可见 ⑤get请求数据放在url,post数据放在http ...

  4. 【border树】【P2375】动物园

    Description 给定一个字符串 \(S\),对每个前缀求长度不超过该前缀一半的公共前后缀个数. 共有 \(T\) 组数据,每组数据的输出是 \(O(1)\) 的. Limitations \( ...

  5. websocket通信1009错误,

    问题说明: springboot继承 WebSocketConfigurer实现websocket通信服务,服务器端报错,"The decoded text message was too ...

  6. mongo 操作

    1.链接mongo /path_to_mongo/bin/mongo MongoDB shell version: connecting to: test > use logs switched ...

  7. adb和fastboot的使用

    1.前言 随着Android系统的普及,ADB(Android Debug Bridge)逐渐成了Android设备调试的必不可少的一种重要工具,该工具可以完成多种功能,例如跟踪系统日志,上传或下载文 ...

  8. ASP.NET-------gridview 进行编辑的时候,给出提示

    在使用gridview 控件的时候,控制修改人的操作行为,并给出合理的提示, 比如 在执行编辑操作的时候  不允许姓名为空,并显示出提示,姓名不可以为空 操作: 前台页面,对一些字段的解释 一定要注意 ...

  9. 039 RabbitMq及数据同步01

    1.RabbitMq (1)问题引出 目前我们已经完成了商品详情和搜索系统的开发.我们思考一下,是否存在问题? 商品的原始数据保存在数据库中,增删改查都在数据库中完成. 搜索服务数据来源是索引库,如果 ...

  10. 最近C#项目中不小心踩的低级坑

    都是很基础的错误问题,大部分都是因为不查一下资料就直接根据其它类似语言的经验写代码导致的 1. 一个企业微信上的正常的界面突然不能滚动了 本以为是浏览器代码计算问题,结果发现是JS出错导致. 2. R ...