WEB程式在釋出前就應該發現的一些錯誤
在軟體開發過程中,寫出影響效能或者有BUG的程式碼,都是我們無法迴避的現實問題。
不過,如果能夠在程式釋出前(自測或者測試階段)將這些問題找出來,我想大家都是可接受的。
今天就來介紹一種方法,用來發現在網站開發過程中,容易被我們忽略的一些問題,而這些問題其實是容易被發現的。
將要介紹的方法需要使用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. 服務端生成【很大的網頁】,是不是也要花較長的生成時間?
4. 如果這個【很大的網頁】的結果來自於資料庫的查詢結果,會不會給資料庫也帶來較大的壓力?
產生這種情況就典型的場景可能由於一條SQL查詢引起的: select * from XXX where name=@name或許在早期階段,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方法中新增一些處理程式碼:
最後,我還要再說一句:如果你不希望釋出有缺陷的程式,並且不希望後期返工,那麼可以嘗試一下本文介紹的方法。
相關文章
- 應用 AddressSanitizer 發現程式記憶體錯誤記憶體
- 【必殺】為應用程式池“XXX”提供服務的程式在與 Windows Process Activation Service 通訊時出現嚴重錯誤。該程式 ID 為“XXXX”。資料欄位包含錯誤號。Windows
- web前端小白經常出現“四”個錯誤Web前端
- 【譯】自動發現 .NET 5 中程式碼的潛在錯誤
- Web前端開發應該避免的幾個思維誤區Web前端
- 一些學Web前端最常見的錯誤分享!Web前端
- Docker就應該通俗易懂一些Docker
- 在vscode上寫Makefile出現格式錯誤VSCode
- ionic 開發中的一些錯誤
- eclipse在使用中彈出這個錯誤框,該如何處理?Eclipse
- Java開發熟手該當心的錯誤Java
- Flutter 最常出現的典型錯誤Flutter
- Laravel 出現 419 錯誤Laravel
- Opencv出現detecMultiScale錯誤OpenCV
- SqlServer NBU備份出現錯誤程式碼2SQLServer
- 當前就業環境下,程式設計師應該自降薪資應聘嗎?就業程式設計師
- 埠占用出現的不同的錯誤:
- SAP Fiori應用裡出現http request錯誤的原因分析HTTP
- 在scanf函式中佔位符使用錯誤而產生的一些錯誤函式
- MVC模式在Java Web應用程式中的實現MVC模式JavaWeb
- [BUG反饋]求解決 linux下 多圖上傳 在ie下可以 但是 在 谷歌下就會報錯出現302的錯誤資訊Linux谷歌
- 糟糕,在錯誤的分支開發了新功能,該怎麼處理呢?
- SAP UI5 應用出現白屏的一些常見錯誤和分析方法分享試讀版UI
- 現在學Web前端,發展前景如何?好就業嗎?Web前端就業
- AS打包出現app:transformClassesAndResourcesWithProguardForRelease錯誤APPORM
- 使用 sudo 命令出現錯誤
- SSH出現Connection refused錯誤
- php7中的curl檔案上傳出現錯誤該怎麼辦PHP
- 為什麼網站伺服器會出現500錯誤程式碼?該怎麼修復?網站伺服器
- “Linux” 小程式釋出 Web 版,現在你可以在 PC 上快速查詢命令啦!LinuxWeb
- 自定義錯誤型別時應該注意的 nil !=nil型別
- .NET CORE WEB API在本地執行得好好的,上傳到伺服器就啟動錯誤WebAPI伺服器
- 記錄一次錯誤的使用當前時間new Date()引發的錯誤
- SAP OData 服務在 gateway 層出錯,應該如何處理?通過一個錯誤訊息來舉例說明Gateway
- Nextcloud的一些錯誤提示Cloud
- 基於Kubernetes實現前後端應用的金絲雀釋出後端
- nginx出現403錯誤的解決方法Nginx
- 【ERROR】Oracle列印錯誤程式碼解釋ErrorOracle
- dllhost.exe是什麼程式 dllhost.exe應用程式錯誤該怎麼辦