前端代码监控Beta 0.0.1

最近在做一个前端监控的js

如图,一个大概的思路是这样的。

图片版


简单看下哈

--------------------------------------------------------文本版


# 代码异常处理

## 参考文章

### http://web.jobbole.com/93684/

### https://www.cnblogs.com/luozhihao/p/8635507.html

### https://segmentfault.com/a/1190000014672384

### https://juejin.im/post/5b5dcfb46fb9a04f8f37afbb

### https://www.jianshu.com/p/fc622f8cff99

### https://juejin.im/post/5aaa93345188257bf550cbfd?utm_medium=fe&utm_source=weixinqun

* 比较完善

##try-catch异常处理

### 缺点

*1.无法识别语法错误

*2.无法处理异步操作发生的错误

###try{代码块}catch{处理方法}

## window.onerror异常处理

### 优点

*1.可处理异步错误

### 缺点

*1.无法识别语法错误

*2.无法捕获网络异常的错误(404)

*3.静态资源跨域无法捕获到错误信息

* 解决方法

*1.标签添加crossorigin=”anonymous”

*2.对应服务器所有域可访问

*4.代码压缩无法精确到位置

* 解决方法

*1.sourceMap

### 注意点

*1.写在JS脚本前面

*2.需要返回true,否则控制台依旧显示错误

### demoCode

*        window.onerror =function (msg, url, row, col, error) {

console.log(msg,  url,  row, col, error)

return true;

};

// 无message 方法

### vue

* dev

* webpack config 中 dev 配置  devTools 配置生成sourcemap  即 #source-map

* build

* 可以正常获取到错误内容

## 重写console.error

###message

* 错误信息

### stack

* 错误提示,只取第一级错误信息

### window.console.error=function(error){let {message,stack} = error}

## 资源的异常

### img

* window.addEventListener('error',()=>{if(img){this.src = demo.png}})

### window.addEventListener('error',function(){})    用这个方法监听图片的异常,onerror不能监听的到

## promise

### promise内部发生的错误

* promise实例未书写catch捕获异常

* 导致try-catch和window.onerror不能发现异常

* 处理方法

*1.每个实例书写catch捕获异常处理

*2.添加promise全局异常捕获事件 unhandlededrejection

* window.addEventListener('unhandledrejection',function(e){e.preventDefault() ajax })

## 框架异常处理

### vue

* errorHandler

* Vue.config.errorHandler=function (err, vm, info) {}

* 仅在 组件渲染期间和watch中自动触发

* 建议在vue项目中,项目组员自己书写

## 代码压缩后解析

### sourcemap

* https://www.npmjs.com/package/source-map/v/0.6.1#new-sourcemapconsumerrawsourcemap

### 版本

*0.6.1

* 由于0.7+之后使用了 WebAssembly 写法,IE和360不支持,故使用0.6.1版本。压缩包可到git获取

###sourceMap API

*SourceMapConsumer

* 具体可看npm 文档

### 总结

* 代码压缩后解析,必须要有编译出来的js的map文件,具体可在压缩的js最后一行可看到map文件路径。在felog.js 中,逻辑是先取到 压缩后的js文件的全名,然后拼接.map 字段,再用ajax去请求 map文件回来,然后才通过SourceMapConsumer 分析map文件,得出源文件和行数。

## 上报的内容

###type

* string

*error

* window.onerror

* console.error

* promiseerror

* warn

* console.warn

* info

* console.info

###line

* string

###prj_id

* string

###url

* string

### brower_info

* string

###create_time

* date

###source

* string

###error_msg

* string

## 错误上报

###ajax

* 访问量巨大的情况下,错误信息过多

* 设置采集率

*if(Math.random < x){ajax}

### 动态创建img

*function report(error) {

var reportUrl ='http://xxxx/report';

    new Image().src = reportUrl +'error=' + error;

}

## 成熟的系统

### BadJS

* 鹅厂封装的window.onerror事件

* https://github.com/BetterJS

* 介绍

* http://slides.com/loskael/badjs/fullscreen#/

* 开源

### FdSafe

* 阿里

### JSTracker

* 淘宝

### ravenjs

* 国外

## 方法总结

### 使用window.onerror捕获JS运行时错误

### 使用window.addEventListener('unhandledrejection')捕获未处理的promise reject错误

### 重写console.error捕获console.error错误

###在跨域脚本上配置crossorigin="anonymous"捕获跨域脚本错误

### window.addEventListener('error')捕获资源加载错误。因为它也能捕获js运行时错误,为避免重复上报js运行时错误,此时只有event.srcElement inatanceof HTMLScriptElement或HTMLLinkElement或HTMLImageElement时才上报

### 重写window.XMLHttpRequest和window.fetch捕获请求错误

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容

  • 我中学时代很喜欢读林清玄的散文,在我们那个小县城,书店里可供挑选的书并不多。所以可见,这位台湾作家在2000年左右...
    李娜_阅读 786评论 3 7
  • 当我今早听完子木的《金钱管理》分享,心里无比愉悦和兴奋,就在前10分钟,还收到别人送来的金钱哦,还是现金。这是否寓...
    垚垚涵涵妈阅读 685评论 0 4
  • 1、javascript是函数式编程2、每个模块被引入的时候形成闭包,全局变量就变成了局部变量
    hkingby阅读 194评论 0 0
  • 后来在某天深夜里,我想起来的确有那么一位少年。 初二跟着学校去参加为期两天的象棋比赛,举办地点在菱湖小学。第一...
    不换爱人的瓦阅读 376评论 0 0