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. 前端代码异常日志收集与监控
  • 相关阅读:
    项目冲刺之任务场景分析
    一位数组的最大子数组(debug版)
    软件工程课堂五(地铁项目的优化)
    人月神话阅读笔记02
    软件工程第七周总结
    人月神话阅读笔记01
    软件工程第六周总结
    构建之法阅读笔记03
    软件工程第五周总结
    软件工程课堂四(合作开发项目-地铁线路查询)
  • 原文地址:https://www.cnblogs.com/tangzhirong/p/7507821.html
Copyright © 2011-2022 走看看