6個減少 JS 錯誤噪音的技巧

通過Web開發(fā)人員提供的這六個重要提示采蚀,了解如何減少JavaScript錯誤噪音并找到JavaScript zen洋侨。請繼續(xù)閱讀祷愉!


如果您嘗試使用JavaScript錯誤跟蹤來構(gòu)建和迭代您的應(yīng)用商架,那么您可能會遇到一個常見的問題:嘈雜余舶,低價(jià)值的通知,這使得很難識別出高優(yōu)先級的問題发绢。

瀏覽器JavaScript可能是捕獲錯誤的最復(fù)雜的環(huán)境硬耍,因?yàn)樗粌H僅是一個環(huán)境!有多種主流瀏覽器边酒,JavaScript引擎经柴,操作系統(tǒng)和瀏覽器擴(kuò)展生態(tài)系統(tǒng),所有這些都匯集在一起墩朦,可以捕獲很好的錯誤(但對應(yīng)用程序的性能并不那么重要)坯认。

像Sentry這樣的錯誤跟蹤平臺能夠在開箱即用的環(huán)境中完成所有噪音。但是,為了獲得最佳效果牛哺,您可以采取一些簡單但改變游戲規(guī)則的步驟來增加信號并使迭代變得更加直接 - 甚至是愉快的陋气。


將您的網(wǎng)址列入白名單

Sentry的瀏覽器的JavaScript SDK拿起每一個從默認(rèn)的Web應(yīng)用程序觸發(fā)未捕獲的錯誤。這包括在您的頁面上運(yùn)行的代碼引润,不一定由您創(chuàng)作或控制巩趁。其中包括由瀏覽器擴(kuò)展程序,惡意軟件或第三方應(yīng)用程序(如聊天窗口小部件淳附,分析和廣告代碼)觸發(fā)的錯誤晶渠。

要忽略此類有問題的錯誤,您可以將SDK配置為將僅源自您自己的代碼的錯誤列入白名單:

Raven.config('your-dsn', {

whitelistUrls: [

'www.example.com/static/js', // your code

'ajax.googleapis.com' // code served from Google CDN

]

}).install();

此示例配置可確保僅將源自www.example.com/static/js和ajax.googleapis.com提供的腳本的錯誤報(bào)告給Sentry服務(wù)器燃观。這種小的配置更改是您可以減少錯誤的最簡單褒脯,最有影響力的更改。


使用入站數(shù)據(jù)過濾器

入站數(shù)據(jù)過濾器是Sentry功能缆毁,旨在從項(xiàng)目中丟棄已知的低值錯誤番川。它們很容易在Sentry項(xiàng)目設(shè)置中切換,因此它們丟棄的任何錯誤都不會計(jì)入您的帳戶配額脊框。

有三個過濾器對JavaScript開發(fā)人員特別有價(jià)值:

1颁督、傳統(tǒng)瀏覽器 - 像IE9這樣的舊瀏覽器會生成低保真錯誤報(bào)告,這些報(bào)告并不總是可操作的浇雹。

2沉御、第三方擴(kuò)展程序 - 自動從已知的瀏覽器擴(kuò)展程序,惡意軟件和廣告腳本中刪除錯誤昭灵。

3吠裆、網(wǎng)絡(luò)抓取工具 - 刪除Google Bot等已知網(wǎng)絡(luò)抓取工具觸發(fā)的錯誤。

入站過濾器不如將Sentry JavaScript SDK配置為白名單錯誤URL一樣強(qiáng)大烂完,但它們很好试疙,因?yàn)橹恍鑿捻?xiàng)目設(shè)置中單擊即可啟用它們。


使用最新版本的JavaScript SDK

Sentry的瀏覽器JavaScript SDK正在積極開發(fā)中抠蚣,并且經(jīng)常進(jìn)行更改以改進(jìn)錯誤報(bào)告的_quality_ 并減少低值錯誤的數(shù)量祝旷。

例如,版本3.26.2默認(rèn)禁止背靠背重復(fù)錯誤嘶窄。如果您遇到從異步循環(huán)(例如怀跛,來自setTimeout 或 XMLHttpRequest 回調(diào))觸發(fā)的錯誤,這可以節(jié)省生命 柄冲。在長期存在的應(yīng)用程序中吻谋,像這樣的錯誤可能會導(dǎo)致單個用戶發(fā)生數(shù)千個事件!

要獲得最佳體驗(yàn)羊初,請保持SDK的副本為最新滨溉。Sentry將告訴您何時有新版本可用,但是也值得定期檢查更改日志以查看新版本长赞。


使用源地圖

源映射不僅可以簡化調(diào)試生產(chǎn)堆棧跟蹤晦攒,還可以使Sentry更容易將錯誤分組到單個問題中。這意味著事件會陷入更小得哆,更易于管理的問題集中脯颜,這意味著您的問題流中的噪音更少,而關(guān)于代碼損壞的電子郵件也會減少2:00贩据。

將源映射作為構(gòu)建和部署過程的一部分并不像切換按鈕那么容易栋操,但Sentry深入的源映射文檔包含了入門所需的一切。除了有助于降低噪聲之外饱亮,源映射可能是您可以對監(jiān)視和調(diào)試工作流程進(jìn)行的最深刻的改進(jìn)矾芙。


忽略麻煩的錯誤

你永遠(yuǎn)不會解決的一些錯誤。當(dāng)它們彈出時近上,您實(shí)際上有兩個選擇:宣布破產(chǎn)剔宪,因?yàn)樗麄儠茐哪愕膽?yīng)用程序,你無法解決它們壹无。

2.完全忽略它們葱绒,因?yàn)樗鼈冏罱K與用戶的體驗(yàn)無關(guān)。

您可以通過Sentry UI或使用該ignoreErrors 選項(xiàng)配置JavaScript SDK以防止客戶端錯誤來忽略錯誤 斗锭。從SDK中執(zhí)行此操作非常理想地淀,因?yàn)樵诳蛻舳思墑e丟棄的錯誤不會到達(dá)Sentry的服務(wù)器,也不會計(jì)入您的帳戶配額岖是。

這是它的樣子:

Raven.config('your-dsn', {

ignoreErrors: [

'Can't execute code from freed script',

/SecurityError: DOM Exception 18$/

]

}).install();

但要小心帮毁!進(jìn)行此更改后,您將永遠(yuǎn)不會再看到這些錯誤豺撑。而以前只是令人討厭的錯誤字符串可能會成為更大的問題作箍,但你永遠(yuǎn)不會被告知它們。哎呀前硫!ignoreErrors 明智地選擇你的 陣列胞得。

請注意,瀏覽器可以針對相同的基本錯誤生成不同的錯誤消息屹电。對于單個 ReferenceError阶剑,您可能需要輸入多個字符串/正則表達(dá)式以涵蓋所有可能的瀏覽器。


上傳源文件(和源地圖)

當(dāng)Sentry遇到從JavaScript文件觸發(fā)的錯誤時危号,它會嘗試從您的應(yīng)用服務(wù)器下載該源文件牧愁,以便將行和列信息與實(shí)際源內(nèi)容相關(guān)聯(lián)。此源內(nèi)容是Sentry錯誤分組算法的基礎(chǔ)外莲。

如果您的源文件只能通過Web訪問猪半,那么很多很多壞事都可能發(fā)生兔朦。例如,您可能有一個構(gòu)建過程磨确,可以在部署新的JavaScript文件時從服務(wù)器中刪除舊的JavaScript文件沽甥。如果您的用戶從較舊的緩存腳本中觸發(fā)錯誤,那么當(dāng)Sentry下載它們時乏奥,它們將不再可用摆舟。無法訪問該內(nèi)容會使分組算法陷入混亂,這意味著將針對通常在現(xiàn)有問題下進(jìn)行沖突的錯誤創(chuàng)建單獨(dú)的問題邓了。

為避免這些和其他中斷情況(例如恨诱,網(wǎng)絡(luò)可用性),我們強(qiáng)烈建議您將生產(chǎn)JavaScript文件和源映射上載為發(fā)布工件骗炉。這意味著Sentry將始終可以直接訪問這些文件照宝,從而確保最大的分組效果。

使用Sentry API完成上傳源文件句葵。這很簡單:

$ curl https://sentry.io/api/0/projects/:organization_slug/:project_slug/releases/:release/files/

-X POST

-H 'Authorization: Bearer YOUR_TOKEN_HERE'

-F file=@app.js.map

-F name="http://example.com/app.js.map"

在文檔中了解有關(guān)工件和版本的更多信息硫豆。


我們來幫忙

與往常一樣,您可以為您的JavaScript應(yīng)用程序嘗試Sentry(它也是100%開源的)笼呆。

感興趣的小伙伴熊响,可以關(guān)注公眾號【grain先森】,回復(fù)關(guān)鍵詞 “vue”诗赌,獲取更多資料汗茄,更多關(guān)鍵詞玩法期待你的探索~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铭若,隨后出現(xiàn)的幾起案子洪碳,更是在濱河造成了極大的恐慌,老刑警劉巖叼屠,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞳腌,死亡現(xiàn)場離奇詭異,居然都是意外死亡镜雨,警方通過查閱死者的電腦和手機(jī)嫂侍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荚坞,“玉大人挑宠,你說我怎么就攤上這事⊥怯埃” “怎么了各淀?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诡挂。 經(jīng)常有香客問我碎浇,道長临谱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任奴璃,我火速辦了婚禮悉默,結(jié)果婚禮上挠铲,老公的妹妹穿的比我還像新娘。我一直安慰自己组哩,他們只是感情好调俘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荧关,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岭辣,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音甸饱,去河邊找鬼沦童。 笑死,一個胖子當(dāng)著我的面吹牛叹话,可吹牛的內(nèi)容都是我干的偷遗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼驼壶,長吁一口氣:“原來是場噩夢啊……” “哼氏豌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起热凹,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泵喘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后般妙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纪铺,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年碟渺,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲜锚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡苫拍,死狀恐怖烹棉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怯疤,我是刑警寧澤浆洗,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站集峦,受9級特大地震影響伏社,放射性物質(zhì)發(fā)生泄漏抠刺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一摘昌、第九天 我趴在偏房一處隱蔽的房頂上張望速妖。 院中可真熱鬧,春花似錦聪黎、人聲如沸罕容。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锦秒。三九已至,卻和暖如春喉镰,著一層夾襖步出監(jiān)牢的瞬間旅择,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工侣姆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留生真,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓捺宗,卻偏偏與公主長得像柱蟀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚜厉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理长已,服務(wù)發(fā)現(xiàn),斷路器弯囊,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5痰哨? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,490評論 1 45
  • 用兩張圖告訴你匾嘱,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料斤斧? 從這篇文章中你...
    hw1212閱讀 12,734評論 2 59
  • 10000小時與成功 與高水平的人接觸,心胸更加開闊霎烙,更容做成大事撬讽。 10000小時對于個人技能的訓(xùn)練是必要的,包...
    馬騁閱讀 437評論 0 0
  • OpenGL ES (Swift) 紋理的簡單應(yīng)用 在上一節(jié)中用一張圖片來渲染圖形悬垃,這次則對上一節(jié)渲染的圖形進(jìn)行簡...
    YxxxHao閱讀 844評論 2 0