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. 前端代码异常日志收集与监控
  • 相关阅读:
    memcache内存估算整理
    yii2-更改默认显示的通用主页
    微信小程序开发工具中快捷键
    微信个人公众号推广
    [微信小程序]编译.wxss出错,2 not found
    [转载]SSH框架搭建详细图文教程
    网址收集
    在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)
    css与html基础收集
    js与jq基础记录
  • 原文地址:https://www.cnblogs.com/tangzhirong/p/7507821.html
Copyright © 2011-2022 走看看