专栏名称: 前端JavaScript
分享 | 学习 | 交流 | 原创 分享是学习的开始;学习不必要从头开始,是从现在开始;交流能沟通你我,提高你的学识;期待你的加入!!! web前端技术交流,JavaScript,HTML5,CSS3……
目录
相关文章推荐
51好读  ›  专栏  ›  前端JavaScript

【第3章第362回】脚本错误量极致优化-监控上报与Script error

前端JavaScript  · 公众号  · Javascript  · 2017-06-06 17:21

正文

在前端开发工作中,除了项目开发保质保量上线以外,项目的数据监控也应该配套起来,确保线上的正常运转。如上报 pv 监控项目是否正常运转;测速上报反应项目质量;脚本错误监控作为监控中重要一环,当页面发生报错的时候,通过上报错误信息,能及时发现存在问题,修复优化、减少损失。

本文基于在手Q家校群前端脚本错误量优化的方案,致力于打造极致的脚本错误优化。


作为首篇,主要讲解基础的脚本错误监控和上报方式,以及常会遇到的 Script error. 的产生原因和处理方法。

监控上报

脚本错误主要有两类:语法错误、运行时错误。

监控的方式主要有两种:try-catch、window.onerror。

监控方式

示例 · try-catch


try{

   test  //

}catch(e){

   console.log('运行时错误信息 ↙');

   console.log(e);

}


通过给代码块进行 try-catch 包装,当代码块出错时 catch 将能捕获到错误信息,页面也将继续执行。

当发生语法错误或异步错误时,则无法正常捕捉。

示例 · try-catch (语法报错)


try{

   functionempty()   //

}catch(e){

   console.log('语法错误信息 ↙');

   console.log(e);

}


无法捕捉错误

示例 · try-catch (异步错误)


try{

   setTimeout(function(){

       test//

   },0)

}catch(e){

   console.log('异步错误信息 ↙');

   console.log(e);

}


无法捕捉错误

语法错误无法在 try-catch 中进行捕抓、而异步报错则可以通过为异步函数块再包装一层 try-catch,增加标识信息来配合定位,可以用工具来进行处理,这里不展开。

示例 · 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){

   console.log('onerror 错误信息 ↙');

   console.log({

       msg,  url,  row,col,error

   })

};

test//


window.onerror 能捕捉到当前页面的语法错误或运行时报错,是十分强大的。

那么try-catch 是否不再需要呢?其实并不是。

在使用过程中的体会:onerror 主要用来捕获预料之外的错误,而 try-catch 则可以用在预知情况下监控特定错误,两种形式结合使用更加高效。

上报方式

监控错误拿到了报错信息,接下来则是将捕抓的错误信息发送到信息收集平台上,发送的形式主要有两种:

  1. 通过Ajax发送数据


  2. 动态创建 img 标签的形式


示例 · 动态创建 img 标签进行上报


functionreport(msg,level){

   varreportUrl="http://localhost:8055/report";

   newImage().src=reportUrl+'?msg='+msg;

}


监控上报整体流程

监控报错,并将捕捉到的错误信息上报给数据收集平台,如下图

错误信息分析 · Script error

有了监控了后,就可以在收集平台上进行查看脚本错误量的日志统计。

发现占据榜首的错误信息 “Script error.” 具有非常高的比例,没有无具体的错误信息,无法定位问题,而这是怎么产生的呢?

产生 Script error 的原因

翻看在 webkit 的源码可以看到 “Script error.” 是浏览器在同源策略限制下所产生的。浏览器出于安全上的考虑,当页面引用的非同域的外部脚本中抛出了异常,此时本页面无权限获得这个异常详情, 将输出 Script error 的错误信息。

优化 Script error

Script error 来自同源策略的影响,那么解决的方案之一是进行资源的同源化,另外也可以利用跨源资源共享机制( CORS )。

方案一:同源化

  1. 将js代码内联到html文件中


  2. 将js文件与html文件放到同一域名下


以上两种方式能够简单直接地解决问题,但也可能带来其他影响,如内联资源不好利用文件缓存,同域无法充分利用cdn优势等等。

方案二:跨源资源共享机制( CORS )

跨源资源共享 ( CORS )机制让Web应用服务器能支持跨站访问控制,从而能够安全地跨站数据传输。主要是通过给请求带上特定头信息,服务器实现了CORS接口,就可以跨源通信,从而能够看到具体报错信息。

1. 为页面上script标签添加crossorigin属性。


推荐文章
新手现货投资指导  ·  短线炒外汇的五大技巧 新手须知
7 年前