成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

處理JS異常的一個想法

開發(fā) 前端
js 異常基本上是前端開發(fā)工程師的家常便飯。如何記錄,并使用它,卻很少人關(guān)注。最近在考慮一個想法,基本上涉及到兩步:收集和使用。

可能由于網(wǎng)絡、瀏覽器問題、緩存等原因,可能導致線上執(zhí)行 js 的時候與開發(fā)環(huán)境并不一樣,會拋出異常。js 異常基本上是前端開發(fā)工程師的家常便飯。如何記錄,并使用它,卻很少人關(guān)注。最近在考慮一個想法,基本上涉及到兩步:收集和使用。

一、收集

對于 error 收集這一塊,還是比較方便的,因為在各瀏覽器中都有一個接口:window.onerror:

  1. window.onerror = function(errorMessage, scriptURL, lineNumber) {  
  2.   alert(errorMessage, scriptURL, lineNumber)  
  3. }  

甚至中提供了 Stack Trace,比如在 try/catch 中還提供了 e.stack(各個瀏覽器不同,可以使用 eriwen/javascript-stacktrace 這個兼容庫),試一下下面這段代碼:

  1. try {  
  2.   fn()  
  3. catch(e) {  
  4.   alert(e.stack)  
  5. }  

所以收集這些錯誤還是比較方便的,這里需要注意的事,使用 window.addEventListener('error', callback, isBubble) 中 callback 的第一個參數(shù)并不是 event,而是一個 Error object。這樣的話,為了方便,使用 window.onerror 是一個不錯的選擇,但通過 dot 操作符監(jiān)聽的事件是可以重載的,并且這段監(jiān)聽腳本理論上是放在所有 js 最前面的,所以需要考慮其中的風險。

二、使用

·之前在支付寶的時候,線上 js 報錯會變成一個郵件,發(fā)給前端開發(fā) team,每個人自己認領、解決。其實這是一個不錯的選擇,也解決了最基本的問題:立即響應,修掉。不過也存在著一個問題,如果避免同樣的錯誤?我的初步想法是這樣的:

·以 URL 為單元,記錄同一個頁面的報錯:方便統(tǒng)一解決

·記錄錯誤包括:Page URL, User Agent, Script URL, Error Message 和 Line Number

·每個錯誤解決后,都可以在一個地方寫解決方案,看到的人可以評論、加分,最終會存檔起來,作為一個知識庫,并用有方便的 api 可以使用這些知識庫的內(nèi)容

·在開發(fā)的時候,相同頁面 window.onerror 的時候,通過插件,分析 Error Message 識別出類型,加上 URL 的判斷,給予開發(fā)者提醒前人犯過的錯誤

·開發(fā)者可以訂閱知識庫上某些標簽,自動接收郵件(當然也可以根據(jù)文件注釋、mapping 等方式做更好的配對)

為什么這樣做?主要是為了解決下面的一些問題:

·形成知識庫,開發(fā)者可以從中得到學習,特別是新人

·工具保證效率的提升和避免重復錯誤重復解決

·訂閱保證通知更具針對性

三、注意點

1. 收集的時候使用 POST 發(fā)送

有時候 Error Message 可能會比較長,而瀏覽器的 URL 長度是有限制的,如果存的錯誤不多的話,可以考慮用 GET 發(fā)送,但通常來說 POST 可以把所有數(shù)據(jù)都發(fā)送到后臺。

2. 何時發(fā)送數(shù)據(jù)

建議在觸發(fā) onerror 的時候發(fā)送。在第一次有這個想法的時候,嘗試著在 onbeforeonload 的時候發(fā)送,但 POST 請求還沒 open 就已經(jīng)被瀏覽器中斷了。

3. 存于數(shù)據(jù)庫以哪個作為索引比較好?

通常來說以 URL 可能會比較適合多數(shù)網(wǎng)站。但像百姓網(wǎng)、淘寶等 UGC 比較多的網(wǎng)站,可能需要變通一下以記錄 URL。畢竟不同帖子不同 URL 都是同一套代碼。

那以 Error 作為索引呢?其實無論是那種,看自己需求選擇吧。

4. 是否記錄所有錯誤

這個也比較合適根據(jù)需求來看。百姓網(wǎng)有各種亂七八糟的報錯可能都是來自到 baidu / Google 的 ad 外鏈。

四、結(jié)語

目前初步實現(xiàn)了一個收集的工具(sofish/stacktrace.js)和存儲方式(以 URL 為索引),是否繼續(xù),還需要時間和進一步考慮,先發(fā)出來,拋磚引玉。

五、附錄

  1. <?php  
  2. $url = new Url();  
  3. $page = $url->post('page');   
  4. if(!$pagereturn;   
  5. class ErrorTrace extends MongoData {  
  6.   // MongoData 中沒有,區(qū)別 http://stackoverflow.com/a/7958954  
  7.   public function findOne($obj) {  
  8.     return $this->connection->findOne($obj);  
  9.   }  
  10. };  
  11. $store = new ErrorTrace();  
  12. $fields = array(  
  13.   'url' => $url->post('url'),  
  14.   'message' => $url->post('message'),  
  15.   'line' => $url->post('line'),  
  16.   'ua' => $url->post('ua'),  
  17. );   
  18. $index = array('page' => $page);  
  19. $hash = md5(json_encode($fields));  
  20. // 不重復記錄一個錯誤,所有錯誤記錄在同一個 URL 下  
  21. if($field = $store->findOne($index)) {  
  22.   if(isset($field[$hash])) return;  
  23.   return $store->setAttr(new Query('page'$page), $hash$fields);  
  24. }   
  25. $store->page = $page;  
  26. $store->$hash = $fields;  
  27. $store->save();  
  28. ?> 

This Gist brought to you by GitHub.

原文鏈接:http://sofish.de/2144

責任編輯:張偉 來源: sofish
相關(guān)推薦

2010-10-14 10:59:49

Facebook

2024-10-24 08:21:33

2015-07-03 11:27:30

程序員自己神器

2023-02-23 08:02:19

PulsarJava

2020-03-16 17:20:02

異常處理Spring Boot

2018-06-24 16:39:28

Tomcat異常線程

2025-02-08 09:57:20

2017-02-14 07:36:16

AR蘋果

2023-11-28 14:22:54

Python音頻

2018-02-06 09:05:25

Java異常處理代碼

2020-06-14 14:51:27

Java數(shù)據(jù)開發(fā)

2024-05-28 14:45:00

2011-10-25 09:28:30

Node.js

2023-01-30 09:01:34

DecoratorsJS語法

2012-11-29 13:23:17

挨踢人物傳51CTO技術(shù)論壇

2020-10-28 17:15:45

Redis前端數(shù)據(jù)庫

2024-05-23 11:53:24

Python代碼異常處理

2019-11-05 17:10:19

Java開發(fā)編程語言

2014-08-22 11:22:09

開發(fā)者

2015-10-27 15:50:47

JS框架
點贊
收藏

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

主站蜘蛛池模板: 2018国产精品 | 国产高清在线精品 | 日韩视频一区二区在线 | 亚洲一区 | 日韩中文字幕 | 欧美高清视频 | 久久一区二区av | 欧美成人免费 | 欧美涩| 一级毛片在线播放 | 中文字幕在线观看 | 免费在线播放黄色 | 一级免费看片 | 久久天堂 | 亚洲成人久久久 | 能免费看的av | 黄免费观看视频 | 一级黄色在线 | 国产一区二区在线免费播放 | 国产精品一区二区三区免费观看 | 国产一区在线免费 | 91av小视频| 欧美一级特黄aaa大片在线观看 | 中文字幕一区二区三区四区 | 请别相信他免费喜剧电影在线观看 | 一级无毛片 | 国产性网 | 亚洲国产成人在线 | 蜜桃av人人夜夜澡人人爽 | 亚洲精选一区二区 | 久久久久亚洲精品 | 日韩免费av网站 | 日本一二三区电影 | 日韩视频在线一区 | 欧美日韩一区二区三区四区五区 | 青青草精品视频 | 亚洲精品乱码久久久久久按摩观 | 6996成人影院网在线播放 | 999久久精品 | 91九色婷婷 | 久久国产视频一区 |