今天就來介紹一種方法,用來發現在網站開發過程中,容易被我們忽略的一些問題,而這些問題其實是容易被發現的。
将要介紹的方法需要使用fiddler這樣一款工具,我将示範如何使用fiddler來發現404錯誤,以及較大的響應輸出問題。
我認為這二個問題實在太低級了,是以我設計了這個方法,并寫了這篇部落格,希望大家能喜歡。
我發現,許多人對于這二類問題(404錯誤和較大的響應輸出)都很不在意,好像它們根本不會對一個網站有任何影響似的。
難道真是這樣嗎?
我認為:如果你做的網站程式,使用者通路量很小,或許的确可以忽略它們。
否則,我還是建議你應該糾正它們,下面我來解釋它們的危害。
404錯誤
我一直認為404不僅僅隻是一個數字,過多的404也會影響程式的性能。
通過對404錯誤的分析,我發現多數的404錯誤都與一些資源檔案的引用有關,比如代碼中引用了不存在css或者js檔案,這些404錯誤發生時,可能并不會影響頁面的正常顯示,是以,這類錯誤根本就不會引起一些開發人員的注意。
再加上,許多人又喜歡複制粘貼,導緻這類錯誤越來越多。
為什麼我會說【過多的404錯誤也會影響性能】呢?
因為當404錯誤産生時,iis其實并不隻是傳回這樣一個數字,而是一個完整的http響應,響應的内容是一個正常的網頁。
不同的iis版本的這個404的錯誤頁面長度并不相同,iis6預設的404錯誤頁面長度超過2k,而iis7.5的預設錯誤頁面會超過8k 。
雖然這個響應看起來并不大,但是由于請求不成功,每當打開這些頁面時,請求會重新發起,數量會越來越多。
反過來,我們可以想一下:如果要引用的資源檔案存在,這些檔案僅僅需要請求一次,浏覽器就會緩存它們,根本不需要每次都重新發起請求。
這樣一來,用戶端減少了請求數量,伺服器減輕了連接配接壓力,那些無意義的404響應所浪費的網絡流量也能消失。
是以,過多的404請求簡直是一個惡性循環,它延長了頁面的顯示時間(前端),給服務端帶來了連接配接壓力,也浪費了網絡資源。
較大的響應輸出
較大的響應輸出,應該是容易了解的,那就是:服務端傳回的結果太大了。
我們可以想像一下【較大的響應輸出】意味着什麼。
1、浏覽器顯示一個【很大的網頁】,是不是會比較慢?
2、【很大的網頁】是不是會花費較長的網絡傳輸時間?
3、服務端生成【很大的網頁】,是不是也要花較長的生成時間?
或許在早期階段,xxx表的記錄很少,或許當初在設計時根本沒想到name會存在一大堆的複制資料時,再或者,當在本地環境測試時,網速根本不是問題,而浏覽器的渲染速度的延遲又沒有被發覺時。
關于【較大的響應輸出】,還有二個可能發生的場景:
1、往viewstate中放入一個很大的對象。
2、展示一個樹形結構,或者是一個沒有where條件的查詢(都屬于不分頁情況)
當以上這三類情況發生時,你認為性能還能接受嗎?使用者還會滿意嗎?
用fiddler發現這些問題
前面我詳細說明了二類低級錯誤的危害,下面再來說說如何盡早地發現它們。
我想許多人都應該用過fiddler,它能夠友善地讓我們知道浏覽器發起的每個請求的request/response,通常用于調試程式。
在fiddler中,404錯誤的請求會用紅字醒目地顯示,每個請求的響應長度也會單獨地顯示出來,貌似直接用fiddler也能容易發現404錯誤以及較大的響應輸出問題。
然而,當通路過多的頁面後,fiddler會顯示非常多的請求記錄,是以,那些低級問題會被淹沒,我們要想發現它們,可能需要花費一點時間。
針對這個問題,我為fiddler定義了二個規則:
隻要打開它們,前面所說的二類低級問題很容易就能發現:
注意:這裡隻顯示符合規則的請求(存在低級問題的請求)。
該怎麼合理地使用這個方法呢?
1、如果你是開發人員,請在自測時,打開fiddler,并選擇我定義那二個規則,
2、如果你是測試人員,請在測試時,打開fiddler,并選擇我定義那二個規則,
3、然後,你們平時該做什麼就做什麼吧,。。。。。。
4、測試結束後,再看一下fiddler視窗,有沒有記錄顯示出來,如果有,那就是發現低級問題了。
是以,我認為這個方法不會給開發人員以及測試人員帶來過多的負擔,畢竟,這個方法不會給他(她)們測試時增加任何負擔,唯獨要求打開一下fiddler,最後在測試完成後,再來看一眼,僅此而已。
或許有些人認為:分析伺服器的iis日志,也能發現這二類問題。
是的,我知道分析iis日志也能發現這些問題,但是,分析iis日志,是不是晚了?
你想過沒有:這樣的問題是不是已經影響了使用者?
反之,不讓使用者【體驗】這些問題,是不是更好?
換句話說:你是否希望釋出一個有缺陷的程式?
如何自定義fiddler過濾規則
如果希望自定義fiddler規則,建議安裝:syntax-highlighting 這個fiddler插件。
然後,打開自定義規則視窗:
此時,會顯示fiddler的規則代碼,供你修改:
在這個視窗中,右邊顯示了能在自定義規則中使用的一些對象類型,以及它們的字段(綠字),屬性(藍字)與方法(黑字)。
我們可以在寫規則時參考這些資訊。
說明:此規則檔案儲存在:x:\my documents\fiddler2\scripts\customrules.js
還記得我前面的截圖中:我在fiddler的rules菜單下面增加了二個自定義規則 嗎?
定義規則菜單的代碼在前面的截圖中(找漢字就能發現,最後4行代碼)。
菜單定義後,還需要在onbeforeresponse方法中添加一些處理代碼:
最後,我還要再說一句:
如果你不希望釋出有缺陷的程式,并且不希望後期返工,那麼可以嘗試一下本文介紹的方法。
最新内容請見作者的github頁:http://qaseven.github.io/