国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

前端一站式異常監(jiān)控捕獲方案

開發(fā) 前端
在服務(wù)器開發(fā)中,我們常常使用日志來記錄請求的錯(cuò)誤和服務(wù)器異常問題,但是在客戶端,前端應(yīng)用直接部署運(yùn)行在用戶的瀏覽器中,如果發(fā)生錯(cuò)誤,應(yīng)該怎樣去捕獲并傳送給服務(wù)器呢?前端錯(cuò)誤日志傳送給服務(wù)器很簡單,在異常發(fā)生時(shí)直接發(fā)請求就可以了,下面我們主要討論下錯(cuò)誤的捕獲方案。

【引自ouven的博客】一、前端異常監(jiān)控的重要性

軟件異常監(jiān)控常常直接關(guān)聯(lián)到軟件本身的質(zhì)量,完備的異常監(jiān)控體系常常能夠快速定位到軟件運(yùn)行中發(fā)生的問題,并能幫助我們快速定位異常的源頭,提升軟件質(zhì)量。

在服務(wù)器開發(fā)中,我們常常使用日志來記錄請求的錯(cuò)誤和服務(wù)器異常問題,但是在客戶端,前端應(yīng)用直接部署運(yùn)行在用戶的瀏覽器中,如果發(fā)生錯(cuò)誤,應(yīng)該怎樣去捕獲并傳送給服務(wù)器呢?前端錯(cuò)誤日志傳送給服務(wù)器很簡單,在異常發(fā)生時(shí)直接發(fā)請求就可以了,下面我們主要討論下錯(cuò)誤的捕獲方案。

二、現(xiàn)有的異常監(jiān)控方案

  • window.onerror全局異常捕獲   目前前端捕獲頁面異常的方式主要有兩種,window.onerror捕獲整個(gè)頁面中運(yùn)行的錯(cuò)誤,它的局限是對于跨域的JavaScript腳本需要添加跨域支持,也就是需要涉及服務(wù)器的修改成本,否則無法獲取到運(yùn)行時(shí)具體的堆棧錯(cuò)誤信息,而是"script error"的信息,不利于我們定位問題。
  1. window.onerror = function(msg, file, row, column, errorObj) { 
  2.     console.log(msg); // script error. 
  3.     console.log(file); //  
  4.     console.log(row); // 0 
  5.     console.log(column); // 0 
  6.     console.log(errorObj); // {} 
  7.     setTimeout(function() { 
  8.         // 發(fā)送請求上報(bào)日志信息 
  9.         errorReport(e.name, e.message + e.stack); 
  10.     }, 5000); 
  11.  
  1. <script src="//domain.com/path/main.js" crossorigin></script> 
  • try-catch運(yùn)行時(shí)解決方案

  現(xiàn)有的另一中方案則是try-catch,對于某個(gè)方法函數(shù),我們可以這樣定義來捕獲函數(shù)里面運(yùn)行時(shí)的異常,但是try-catch只能捕獲當(dāng)前單個(gè)作用域下的異常。另外,使用try-catch會(huì)帶來一定的性能損耗,根據(jù)循環(huán)測試,平均大概會(huì)損失6%~10%的性能,但是為了提升應(yīng)用的質(zhì)量和穩(wěn)定性,這些是可以接受的。 

  1. function wrapFunction(fn) { 
  2.     return function() { 
  3.         try { 
  4.             return fn.apply(this, arguments); 
  5.         } catch (e) { 
  6.             console.log(e); 
  7.             _errorProcess(e); 
  8.             return
  9.         } 
  10.     }; 
  11.  
  12. // 之后fn函數(shù)里面的代碼運(yùn)行出錯(cuò)時(shí)則是可以被捕獲到的了 
  13. fn = wrapFunction(fn); 
  14.  
  15. // 或者異步函數(shù)里面的回調(diào)函數(shù)中的錯(cuò)誤也可以被捕獲到 
  16. var _setTimeout = setTimeout; 
  17. setTimeout = function(fn, time){ 
  18.     return _setTimeout(wrapFunction(fn), time); 
  19.  
  20. // 模塊定義函數(shù)也可以做重寫定義 
  21. var _require = require; 
  22. require = function(id, deps, factory) { 
  23.     if (typeof(factory) !== 'function' || !factory) { 
  24.         return _require(id, deps); 
  25.     } else { 
  26.         return _require(id, deps, wrapFunction(factory)); 
  27.     } 
  28. };  

那么我們可以對常用的模塊入口函數(shù)進(jìn)行重定義,包括define,require等,這樣模塊中的主要作用域中的異常都可以通過try-catch來捕獲了。在之前的處理方法中,這種方法是非常有效的,直接可以拿到大多數(shù)錯(cuò)誤棧中的異常和堆棧信息。

三、改進(jìn)的一站式解決方案

React開發(fā)時(shí)代,這種方式就不能直接使用了,我們知道React的組件都是class,其實(shí)也就是構(gòu)造函數(shù),這里普及下class和構(gòu)造函數(shù)其實(shí)是非常類似的,class A除了constructor為class A,其它信息和function A類似,typeof獲取的類型也相同。但是我們是沒辦法把構(gòu)造函數(shù)A直接裝入try-catch中運(yùn)行的,因?yàn)樾枰ㄟ^關(guān)鍵字new進(jìn)行實(shí)例化,并創(chuàng)建新的作用域。 

    

 

此時(shí)我們要處理的問題其實(shí)是捕獲React中屬性方法中的錯(cuò)誤,應(yīng)該還記得,JavaScript中函數(shù)有個(gè)特殊的屬性prototype,當(dāng)函數(shù)作為構(gòu)造函數(shù)是,prototype中的屬性就成了實(shí)例化后的屬性方法,而且這一屬性對class同樣生效。那么我們可以對React中class的prototype這個(gè)特殊屬性的內(nèi)容進(jìn)行處理,對Component中的方法函數(shù)進(jìn)行封裝。

  1. function defineReact(Component) { 
  2.  
  3.     var proto = Component.prototype; 
  4.  
  5.     for (var key in proto) { 
  6.         if (typeof(proto[key]) === 'function') { 
  7.             proto[key] = _wrapFunction(proto[key]); 
  8.         } 
  9.     } 
  10.  
  11.     return Component; 
  12.  

這樣通過實(shí)例化產(chǎn)生的React組件中的內(nèi)部方法中的錯(cuò)誤就可以被捕獲到了。 

  1. class component extends React.Component { 
  2.     componentDidMount(){ 
  3.         var a = {}; 
  4.         console.log(a.b.c); 
  5.     } 
  6.     render() { 
  7.         return <div>hello world</div>; 
  8.     } 
  9. export default defineReact(component);  

這里添加defineReact的操作就可以放到構(gòu)建打包工具中去處理了,這樣就避免了我們對代碼層直接進(jìn)行修改。 

 

React直接報(bào)錯(cuò)不利于定位問題   

 

封裝后直接獲取堆棧錯(cuò)誤 

四、小結(jié)

  小結(jié)一下,其實(shí)和原有的方式差別不大,仍然通過try-catch的方式,覆蓋到React組件prototype屬性中進(jìn)行異常捕獲,極大增加了錯(cuò)誤捕獲范圍,不僅能幫助我們快速定位開發(fā)中的問題,也能捕獲React線上應(yīng)用的運(yùn)行時(shí)錯(cuò)誤。 

責(zé)任編輯:龐桂玉 來源: ouven的博客
相關(guān)推薦

2024-08-19 09:05:00

Seata分布式事務(wù)

2010-05-06 16:02:26

2021-03-16 17:51:03

戴爾

2013-06-14 09:30:52

2013-10-20 13:30:07

華為一站式BYOD敏捷辦公

2015-12-15 17:33:57

戴爾云計(jì)算

2015-04-19 16:36:10

騰訊云

2013-12-12 15:34:00

Moneta移動(dòng)支付一站式解決方案

2022-09-16 11:27:46

建設(shè)微服務(wù)

2009-10-23 09:42:24

2009-07-30 21:16:29

布線服務(wù)電纜架設(shè)

2023-10-26 06:59:58

FinOps云原生

2017-11-28 13:53:18

2015-02-02 11:06:21

cocos cocos一站式解決

2023-05-26 08:37:04

All in ECPES數(shù)據(jù)

2013-10-24 17:35:01

云網(wǎng)絡(luò)H3C電子政務(wù)

2012-04-09 17:36:38

華為智真

2009-07-27 11:37:04

網(wǎng)絡(luò)拓?fù)?/a>摩卡

2021-12-07 10:04:34

Azure Kuber場景應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一区av在线播放| 精品国产一区二区三区忘忧草 | 麻豆成人入口| 日韩欧美国产网站| 99久久99久久精品| 欧美日韩视频| 国产91精品不卡视频| 国产美女一区视频| 亚洲成av人片一区二区| 成人性生活视频免费看| 激情欧美国产欧美| 日韩免费在线视频| 69堂免费精品视频在线播放| 欧美日韩色婷婷| 韩国一区二区av| 激情偷乱视频一区二区三区| 1卡2卡3卡精品视频| 青青草久久爱| 中文字幕欧美精品日韩中文字幕| 国产在线一二| 亚洲品质自拍视频| 色诱视频在线观看| 国产伦精品一区二区三区免费迷 | 亚洲福利一区| 日韩美女写真福利在线观看| 欧美大片网站| 亚洲欧美一区二区三区情侣bbw| a√资源在线| 粉嫩老牛aⅴ一区二区三区 | 久久66热偷产精品| 久久这里精品国产99丫e6| 中文字幕免费一区二区| 国产精品揄拍一区二区| 九九久久精品| 欧洲永久精品大片ww免费漫画| 精品中文字幕一区二区三区| 精品一区二区三区四区| 国产在线视频网址| 精品日韩中文字幕| 亚洲精品666| 伊人一区二区三区| 嫩草影院官网| 一区二区国产视频| 午夜影院韩国伦理在线| 亚洲乱码国产乱码精品精可以看| 色成人亚洲网| 亚洲精品国产一区二区精华液| 四虎免费av| 成人免费视频在线观看| 国产一二三视频| 亚洲一区二区精品视频| 黄页网址大全在线播放| 精品久久久免费| 精品亚洲综合| 6080国产精品一区二区| 欧美性video| 国产视频在线观看一区二区| 成人在线视频免费| 丝袜美腿精品国产二区| 亚洲亚洲一区二区三区| 97在线视频精品| 欧美日韩伦理在线免费| 2022国产精品| 亚洲欧美网站| 成人性做爰片免费视频| 91亚洲国产成人精品一区二三| 色悠悠久久综合网| 亚洲综合色婷婷| 日本不卡不卡| 国产亚洲综合久久| 国产精品网站在线看| 国产精品久久久久久久久久久久久 | 欧美在线91| 久久亚洲免费| 国产成人一区在线| 在线免费观看视频黄| 五月天激情综合| 色屁屁www国产馆在线观看| 国产亚洲精品日韩| 天堂综合网久久| 国产欧美日韩一区| 国产精品 欧美精品| 欧美日韩在线观看不卡| 欧美日韩精品在线视频| 超碰免费公开在线| 精品国产拍在线观看| 亚洲成aⅴ人片久久青草影院| www久久99| 国产98色在线|日韩| 交换国产精品视频一区| 欧美精品自拍偷拍| 国产剧情一区二区在线观看| 91精品视频免费| 国产一区二区三区精品视频| 成人av网页| 日韩欧美综合在线| 福利电影一区| 久久久久无码国产精品一区| 94色蜜桃网一区二区三区| 飘雪影院手机免费高清版在线观看| 精品国产网站在线观看| 神马午夜久久| 日韩 欧美 自拍| 亚洲图片一区二区| 电影亚洲精品噜噜在线观看| 91久久国产综合久久91精品网站 | 亚洲成人原创| 密臀av一区二区三区| 欧美人与z0zoxxxx视频| 精品国产一区二| 好吊色欧美一区二区三区视频| 99精品黄色片免费大全| 成人亚洲综合天堂| 久久97精品久久久久久久不卡| 亚洲少妇诱惑| 丁香婷婷自拍| 在线观看国产成人av片| 亚洲小说区图片区| 欧美精品久久久久久久久25p| 欧美一级精品大片| 99久久影视| 午夜激情在线观看视频| 亚洲国产成人爱av在线播放| 欧美一级本道电影免费专区| 国产视频一视频二| 精品久久久久久无| 91精品福利| www.男人的天堂.com| 色狠狠av一区二区三区香蕉蜜桃| 日韩欧美中字| 天天色综合6| 欧美精品在线免费| 国产另类ts人妖一区二区| 国产永久av在线| 国产精品成人va在线观看| 91香蕉视频mp4| 国产精品电影| 国产视频精品网| 偷拍亚洲欧洲综合| 亚洲天堂日韩在线| 亚洲精品自拍网| 欧美尺度大的性做爰视频| 国产成人自拍在线| av影院在线| 亚洲精品9999| 欧美xxx久久| 久久成人免费| 精品av中文字幕在线毛片 | 国产精品综合网站| 成人欧美一区二区三区1314| 国产亚洲高清在线观看| 免费看毛片的网址| 亚洲精选中文字幕| 国产在线精品一区二区| 国产精品一品| 午夜精品一区二区三区在线观看| 欧美理论片在线| 99成人精品| 成人免费视频视频在线观看免费| 成人免费视频| 懂色av一区二区三区在线播放| 一二三四社区欧美黄| 国产最新精品| 黄页网站在线观看| 91在线免费网站| 日韩欧美一区二区三区久久| 欧美日一区二区三区在线观看国产免| 欧美色图另类| 久久99精品国产一区二区三区| 欧美羞羞免费网站| 国产一区白浆| 国产传媒在线观看| 亚洲精品天堂成人片av在线播放| 在线电影av不卡网址| 久久色视频免费观看| 日韩成人动漫在线观看| 日日噜噜夜夜狠狠视频| 91日本在线观看| 51精品国自产在线| 国产最新精品精品你懂的| 欧美系列精品| aaaaa毛片| 国产精品免费一区二区| 精品国产露脸精彩对白| www.久久久久久久久| 国产精品igao视频网网址不卡日韩| 亚洲三级视频网站| 国产有码在线一区二区视频| 69p69国产精品| 成人网页在线观看| 亚洲自拍电影| av中文字幕在线播放| 国产真实老熟女无套内射| 欧美精品久久久久久久久| 亚洲妇熟xx妇色黄| 美女任你摸久久| 日韩mv欧美mv国产网站| 怡红院在线播放| 亚洲精品自拍网| 日本一区二区三区视频在线观看 |