zoukankan      html  css  js  c++  java
  • 前端代码异常监控

    JS异常一般包括两方面:语法错误和运行时错误。语法错误应该在开发阶段避免。通常处理JS异常的方案有2种:

    • try...catch捕获
    • window.onerror捕获

    1. try...catch捕获

    try {
        var btn = $('#id');
        btn.on('click', function() {
            throw new Error(); 
        });
    } catch(e) {
        console.log(e.name + e.message);
    }
    
    优点
    • 可以细化到代码块
    • 可以自定义错误类型
    缺点
    • 发生语法错误不进入try时,无法捕获
    • 回调函数的异常不会被外层catch捕获,必须内部再嵌套try...catch
    小结

    try...catch方式繁琐,工作量大,依赖编译工具部署

    2. window.onerror捕获

    加载一个全局的error事件处理函数用于自动收集错误报告,但window.onerror必须放在所有JS文件之前才能捕获所有的异常信息。

    • JS运行错误时(语法和运行时错误),window触发ErrorEvent接口的error事件,执行window.onerror();
    • 某些资源加载失败(img/script),加载资源的元素会触发一个Event接口的error事件,并执行该元素上的onerror()处理函数,这些error不会冒泡到window
    window.onerror = function(messge, source, lineno, colno, error) {
        console.log(message);   // 错误信息
        console.log(source);    // 脚本地址
        console.log(lineno);    // 行号
        console.log(colno);     // 列号
        console.log(error);     // Error对象
        return true;    // 阻止执行默认事件处理函数,不会
    }
    
    element.onerror = function(evt) {
        ....
    }
    

    3. 跨域JS文件异常捕获

    为了提升web性能,大部分web产品都有CDN部署,将资源部署到不同的域名上,利用浏览器的并发请求机制。

    当加载不同域的脚本发生错误时,由于浏览器安全性限制,语法错误的细节不会报告,仅返回"Script error"。

    针对这种问题,可以在服务器端设置"Accesss-Control-Allow-Origin: *"的响应头,允许跨域请求,在请求资源的script标签添加crossorigin属性即可。

    <script src="xxxx/test.js" crossorigin></script>
    

    4. Sentry

    可以使用Sentry这样的异常统计工具进行监控,加载语言的SDK,自动上传异常信息。

    对于JS,可以了解下raven.js的使用。

    参考文章

    1. Sentry官网
    2. 前端代码异常日志收集与监控
  • 相关阅读:
    【转自百度贴吧】把古诗最后三个字改为“日了狗”,看谁最有才!
    计划!
    [BZOJ2424][HAOI2010]订货
    [BZOJ1026][SCOI2009]windy数
    【作文】高考之外
    [AYYZVijos1761]运输问题
    [BZOJ1047][HAOI2007]理想的正方形
    [NOIP2015]代码
    新的独立博客
    不忘初心,方得始终——NOIP2016前的感悟
  • 原文地址:https://www.cnblogs.com/tangzhirong/p/7507821.html
Copyright © 2011-2022 走看看