有一种八阿哥(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. ToDoList--HttpMediaTypeNotSupportedException

    org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-url ...

  2. mysql数据库锁的机制-one

    锁概念 : 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 举例 :以买火车票为例,火车票可面向广大消费者 ...

  3. 在Hadoop-3.1.2上安装HBase-2.2.1

    目录 目录 1 1. 前言 3 2. 缩略语 3 3. 安装规划 3 3.1. 用户规划 3 3.2. 目录规划 4 4. 相关端口 4 5. 下载安装包 4 6. 修改配置文件 5 6.1. 修改策 ...

  4. C语言实现Socket简单通信

    环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等. 分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客 ...

  5. 最短路径 | 1003 dfs 或 dij ,单源最短路径条数与经过的点权最大

    这题很早之前就遇到过,是pat留给我的第一印象,然而昨天却有点写不出来.今天dfs用了10分钟不到写出来了.dij用了大约15分钟,捉虫花了一点时间. dfs: 注意剪枝的时候别剪错就行了. #inc ...

  6. caffe解析

    Caffe支持CUDA,Caffe和TensorFlow没有给出分布式的版本, 可以使用多gpu,Caffe通过直接在执行指令后面加上-gpu 0,1

  7. 某邀请赛misc key家用完整版

    目录 题目下载 提示 解题过程 1.提取RGB值 2.找到key 3.循环异或,得到flag 反思 题目下载 题目名:key 提示 提取钥匙中特殊颜色的RGB循环异或KEY值 解题过程 1.提取RGB ...

  8. 【Gamma阶段】第七次Scrum Meeting

    冰多多团队-Gamma阶段第七次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 语音输入shell应用:基于pytorch ...

  9. linux 操作文件夹

    创建文件夹[mkdir] 一.mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录. 二.mkdir命令使用格式 格式:mkdir [选项] DirNa ...

  10. Alpha冲刺(7/10)——2019.4.29

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...