前端代码异常监控总结

【这个在去年8月就起稿了,一直没有发布....】

一、前言

  说到前端监控大家应该都不会陌生,这是现代前端工程的标配之一。引入前端监控系统,可以使用例如fundebugSentry等第三方监控神器,当然你完全可以自己定制一套符合实际情况的监控模型。一个监控系统大致可以分为四个阶段:日志采集、日志存储、统计与分析、报告和警告。下面主要从几个方面谈谈我对前端代码异常监控的一些理解。

二、JS异处理

脚本错误一般分为两种:语法错误,运行时错误。常见的处理方式有:

2.1 try..catch 捕获

用来捕获捉到运行时的同步错误,示例:

try {
   a // 未定义变量 ,如果这里是语法错误,是无法捕获的,不过语法错误一般都会被eslint拦下了
} catch(e) {
  console.log(e);  //上报错误
}

2.2 window.onerror

捕获全局错误:

/**
 * @param {String}  msg    错误信息
 * @param {String}  url    出错文件
 * @param {Number}  row    出错行号
 * @param {Number}  col    出错列号
 * @param {Object}  error  错误详细信息
 */
 window.onerror = function (msg, url, row, col, error) {
  //code  //解析,收集,上报  return true;//错误便不会暴露到控制台中
};
error;  

2.3 注意几点:

a、对于 onerror 这种全局捕获,最好写在所有 JS 脚本的前面,因为你无法保证你写的代码是否出错,如果写在后面,一旦发生错误的话是不会被 onerror 捕获到的。

b、onerror 是无法捕获到网络异常的错误,于网络请求异常不会事件冒泡,因此必须在捕获阶段将其捕捉到才行,我们可以:

<script>
window.addEventListener(‘error‘, (msg, url, row, col, error) => {
  console.log(‘我知道 404 错误了‘);
  console.log(
    msg, url, row, col, error
  );
  return true;
}, true);
</script>
<img src="./404.png" >

  

c、在实际的使用过程中,onerror 主要是来捕获预料之外的错误,而 try-catch 则是用来在可预见情况下监控特定的错误,两者结合使用更加高效。

三、Promise 错误

Promise 实例抛出异常而你没有用 catch 去捕获的话,onerror 或 try-catch 也无能为力,无法捕捉到错误。

所以如果你的应用用到很多的 Promise 实例的话,特别是你在一些基于 promise 的异步库比如 axios 等一定要小心,因为你不知道什么时候这些异步请求会抛出异常而你并没有处理它,所以你最好添加一个 Promise 全局异常捕获事件 unhandledrejection。

window.addEventListener("unhandledrejection", function(e){
  e.preventDefault()
  console.log(‘我知道 promise 的错误了‘);
  console.log(e.reason);
  return true;
});
Promise.reject(‘promise error‘);
new Promise((resolve, reject) => {
  reject(‘promise error‘);
});
new Promise((resolve) => {
  resolve();
}).then(() => {
  throw ‘promise error‘
});

四、异常上报

4.1、上报方式

监控拿到报错信息之后,接下来就需要将捕捉到的错误信息发送到信息收集平台上,常用的发送形式主要有两种:

  1. 通过 Ajax 发送数据
  2. 动态创建 img 标签的形式

实例 - 动态创建 img 标签进行上报

function report(error) {
  var reportUrl = ‘http://xxxx/report‘;
  new Image().src = reportUrl + ‘error=‘ + error;
}

  

4.2、抽样上报错误

Reporter.send = function(data) {
  // 只采集 30%
  if(Math.random() < 0.3) {
    send(data)      // 上报错误信息
  }
}

 

五、统计页面所有AJAX性能数据

 如何统计页面所有AJAX性能数据,如何知道所有AJAX已加载完毕?鉴于绝大部分网页的ajax都是用的XMLHttpRequest对象,我们可以在页面加载之处重新定义XMLHttpRequest对象,对open,onload,onreadystatechange方法进行拦截。请求接口时长可以监听ajaxReadyStateChange事件:

     /**
     * 拦截接口请求,上报接口信息
     */
    //统一拦截ajax请求
    var start_time = 0,
        gap_time = 0;  //计算请求延时
    window.addEventListener(‘ajaxReadyStateChange‘, function (e) {
        var xhr = e.detail,
            status = xhr.status,
            readyState = xhr.readyState,
            responseText = xhr.responseText;

        /**
         * 计算请求延时
         */
        if(readyState == 1){
            start_time = (new Date()).getTime();
        }
        if(readyState == 4){
            gap_time = (new Date()).getTime() - start_time;
        }
        /**
         * 上报请求信息
         */
        if(readyState == 4){
            httpReport(gap_time, status, xhr.responseURL)
        }

    })

  

六、如何解决数据频繁写入数据量太大的问题,数据库应该怎么设计或处理

1、写定时任务,每晚几点钟对数据表进行备份,统计,或删除

....

参考:

https://github.com/happylindz/blog/issues/5

原文地址:https://www.cnblogs.com/leaf930814/p/9251776.html

时间: 2024-11-07 20:51:36

前端代码异常监控总结的相关文章

前端代码异常日志收集与监控

在复杂的网络环境和浏览器环境下,自测.QA测试以及 Code Review 都是不够的,如果对页面稳定性和准确性要求较高,就必须有一套完善的代码异常监控体系,本文从前端代码异常监控的方法和问题着手,尽量全面地阐述错误日志收集各个阶段中可能遇到的阻碍和处理方案. ? 收集日志的方法 平时收集日志的手段,可以归类为两个方面,一个是逻辑中的错误判断,为主动判断:一个是利用语言给我们提供的捷径,暴力式获取错误信息,如 try..catch 和 window.onerror. 1. 主动判断 我们在一些运

前端异常监控解决方案研究

摘要: 异常监控不复杂也不简单啊... 原文:前端异常监控解决方案研究 作者:frustigor 前端监控包括行为监控.异常监控.性能监控等,本文主要讨论异常监控.对于前端而言,和后端处于同一个监控系统中,前端有自己的监控方案,后端也有自己等监控方案,但两者并不分离,因为一个用户在操作应用过程中如果出现异常,有可能是前端引起,也有可能是后端引起,需要有一个机制,将前后端串联起来,使监控本身统一于监控系统.因此,即使只讨论前端异常监控,其实也不能严格区分前后端界限,而要根据实际系统的设计,在最终的

异常监控:教你如何优雅的处理前端异常

前端一直是距离用户最近的一层,随着产品的日益完善,我们会更加注重用户体验,而前端异常却如鲠在喉,甚是烦人. 一.为什么要处理异常? 异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由去做这样的事情. 增强用户体验: 远程定位问题: 未雨绸缪,及早发现问题: 无法复线问题,尤其是移动端,机型,系统都是问题: 完善的前端方案,前端监控系统: 对于 JS 而言,我们面对的仅仅只是异常,异常的出现不会直接导致 JS 引擎崩溃,最多只会使当前执行的任务终止. 二.需要处理哪些异常? 对于前端来说,

前端异常监控 - BadJS

前端异常监控 - BadJS 简介:BadJS 是 web 前端异常监控解决方案,提供一种 web 页面的脚本错误监控.上报.统计.查看等系统化的跟踪解决方案.目前BadJS覆盖了腾讯课堂.公众号.邮箱等公司40+业务,支持脚本错误捕获.上报.统计.告警.定时发送邮件报表等各项能力.BadJS 已在 Github上开源(https://github.com/betterjs)

应对新兴威胁——国都兴业恶意代码综合监控系统发布

近日,国都兴业公司的慧眼恶意代码综合监控系统正式发布.该产品是国都兴业新一代全新应对新形势下网络安全威胁的多维度监控系统,能够实现安全威胁的全生命周期监控,在恶意代码的渗透阶段.潜伏阶段和攻击阶段实现全面监控覆盖,实现对各种高级.复杂的网络威胁与攻击.该技术理念属国内同类产品首创,并处于领先地位. 伴随着中国信息化的高速发展,网络安全形势也日趋复杂,面对着今天各种高级.复杂地安全威胁与攻击,依赖已知特征.规则及行为匹配模式进行检测.监测的传统安全产品(防火墙.IDS/IPS.防病毒网关)已无法应

干货 | 云智慧透视宝Java代码性能监控实现原理

这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,炒一手好菜的男神架构师老公的大作,曾发表于技术公号,经本人授权转载,如有技术问题,我代为请他本人解答~~ 一.Java平台体系及应用场景 从1995年Sun Microsystems公司正式推出Java,到2006年时Sun公司将其开源,迄今为止已经有了20年的历史.Java本身已不仅仅只是一门面向对象的编程语言,而是由一系列计算机软件和规范形成的技术体系,这个技术体系提供了

Electron打包前端代码

本文主要介绍如何利用Electron将前端代码打包成exe文件. 其实如何通过Electron将前端代码打包成exe文件,其入门教程讲的挺详细的,但是浏览一遍下来还是不太清楚到底该怎么操作,这里只是将其细化分解. 首先,我们需要确保我们的电脑上已经配置好了Node.js环境,如果没有的话,请到Node.js下载并安装配置. 其次,我们需要有一个写好的Electron应用,如果你不嫌麻烦的话,可以按照入门教程中的打造你第一个Electron应用一步一步自己手动创建,但是我会从他的GitHub仓库里

好的前端代码标准

开始学前端的时候,遇到什么问题,从网上查资料,解决了就pass,不过心里心里还是比较没谱的,因为不符合学院派的作风.起码也得知道前端的原则是什么,好的前端代码的标准是什么,才能评价自己的代码. 最近终于抽空看了看有关JS的书,总算心里有了点底. 一.层次分离 把前端分为三层:结构层.表示层.行为层,这三样分别对应者HTML.CSS.JS.基本的现状是: 1. HTML里能嵌入CSS和JS 2. CSS和JS功能上有重叠的地方 所谓层次分离就是不混淆各自的主要功能,狭义上说就是HTML定义结构,C

[六字真言]5.咪.功力不足,学习前端JavaScript异常

A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出错!这篇文章中我们来看下JavaScript中的出错处理.文章会覆盖异常处理使用的正反例,然后看下ajax的异步处理. JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出.理论上,有人会说错误