ASP.NET MVC之如何看待內建配置來提高效能優化(四)
前言
前幾篇我們比較基礎的講了下MVC中的知識,這一節我們穿插點知識,講講MVC中我們可以提高效能的辦法。
Razor檢視引擎優化(優化一)
我們知道預設情況下配置MVC去解析一個檢視會首先約定通過查詢所有的匹配Web Form檢視引擎的名稱。例如當我們查詢一個不存在的檢視時,會出現如下錯誤:
從上面我們可以很明顯的知道,如果我們MVC應用程式中沒有使用ASPX檢視時,當我們在Action
方法中通過 return View()
返回檢視或者 Html.RenderPartial
等查詢檢視時每次都會檢查上述四個未使用的位置,此時這是相當的耗時而且效能十分低下尤其是當檢視比較龐大時,這樣造成的後果簡直無法想象。我們有沒有什麼解決的辦法呢?如下:
移除Web Form檢視引擎
在MVC中移除Web Form
檢視引擎非常簡單,我們需要移除所有的Web Form
檢視引擎僅僅留下Razor
檢視引擎,我們在Global.asax.cs
的Application_Start
事件中新增如下程式碼:
//移除所有檢視引擎
ViewEngines.Engines.Clear();
//新增Razor檢視引擎
ViewEngines.Engines.Add(new RazorViewEngine());
此時我們再來執行下程式:
我們成功的移除了ASPX檢視引擎。
注意 :通過上述移除Web Form檢視引擎,此時我們基於Razor檢視引擎查詢匹配的第一個檢視就是正確的,所以此時
Razor
檢視引擎的效能較比之前接近將提升兩倍,當然這樣使用必須要有前提,確保我們的MVC應用程式中不會用到Web Form,如果我們既想使用Razor檢視引擎又想使用ASPX檢視引擎則不能那麼做。
設定Debug = false(優化二)
在MVC中除錯模式和釋出模式對MVC應用程式究竟有什麼不同呢?
Debug Mode (除錯模式)
在除錯模式下,檢視解析有利於開發中進行優化,通過檢視解析一次又一次請求我們的程式碼最終渲染成一個有名稱的檢視被稱為檢視迭代,這種作用是很顯而易見的,當我們在進行實際開發時對程式碼進行了更改我們需要環境立即做出響應。
Release Mode(釋出模式)
在釋出模式下,MVC的檢視解析有利於效能的優化,當一個檢視在釋出模式下被正確解析了,此時會快取該搜尋的結果,當再次遇到以該檢視命名的引用時不需要在另外一個檔案系統中進行搜尋。
通過上述描述我們能夠理解如果模式是在釋出模式下在第一次被解析後,其結果是能夠被快取的,雖然在檢視引擎中Web Form檢視引擎優先於Razor檢視引擎執行,但是主要在第一次被解析後其結果會被快取,所以其帶來的影響可以忽略不計。只要我們的生產環境不是在除錯模式下,這個檢視解析問題可以完全被消除。
那麼問題來了,設定Debug = false僅僅是為了檢視引擎? 顯然不是,我們接著往下看。
檢視解析快取只是一個為了確保我們的網站沒有執行在除錯模式下眾多中的一個理由,其實還有其他嚴重缺點。
(1)超時問題(Timeouts)
不知道你是否注意到,我們曾花大量的時間在沒有暫停的請求超時問題下進行著除錯,這是因為我們設定【debug=”true”】完全禁止了請求超時,很顯然這在一個已上線的網站上這樣做不是一個好主意。
(2)捆綁和壓縮(Bundling and Minification)
貌似聽到這兩個詞感覺很陌生對吧,我們一一來看你就恍然大悟了。
在建立專案App_Start
資料夾下有個 BundleConfig
配置,這個就是用來捆綁指令碼和壓縮指令碼以及樣式的配置檔案。例如我們現在將jquery指令碼進行捆綁,如下:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
此時我們來看看結果:
此時我們將配置檔案中模式進行如下更改:
我們再來看看結果:
這就驗證了我們的觀點,如果是在釋出模式下它將會自動進行捆綁和壓縮,但是當我們在配置檔案中將【debug=”true”】此時將不會縮小、也不會繫結指令碼組合從而達不到縮短請求時間的目的。很顯然在開發中除錯時這是非常重要的,但是其違背了我們在生產環境進行了效能優化的基本準則,這一點我們需要注意。
對於上述對於捆綁和壓縮指令碼或者樣式的問題,有人就會想了,我們可以通過程式碼來進行顯示啟動,如下在BundleConfig配置檔案中進行設定也是可以的:
BundleTable.EnableOptimizations = true;
通過上述程式碼即使在Web.Config檔案中將模式設定為了【Debug=”true”】此時也會啟動壓縮和捆綁指令碼或者樣式,因為其顯式覆蓋了在Web.Config環境中的設定。
(3)WebResource.axd快取
對於客戶端資源優化,服務資源只有在釋出模式下才會包括在快取頭中,在除錯模式下根本不會去進行快取。
相關文章
- 在ASP.NET Core中用HttpClient(四)——提高效能和優化記憶體ASP.NETHTTPclient優化記憶體
- 提高網站訪問效能之Tomcat優化網站Tomcat優化
- 記一次ASP.NET MVC效能優化(實際專案中)ASP.NETMVC優化
- 如何使用函式來優化效能函式優化
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- Linux效能優化實戰CPU篇之總結(四)Linux優化
- Android中的Gradle之配置及構建優化AndroidGradle優化
- js程式碼優化 提高執行效能JS優化
- 效能優化小冊 - 提高網頁響應速度:優化你的 CDN 效能優化網頁
- webpack--效能優化之打包構建速度和程式碼除錯優化Web優化除錯
- ASP.NET Core 效能優化最佳實踐ASP.NET優化
- 六、Android效能優化之UI卡頓分析之渲染效能優化Android優化UI
- Android效能優化之佈局優化Android優化
- 掌握提高 Web 應用的效能的方法 之 優化 PHP 和 LaravelWeb優化PHPLaravel
- 如何提高碼農產量,基於ASP.NET MVC的敏捷開發框架之自定義表單ASP.NETMVC敏捷框架
- Spark效能優化:提高並行度、使用reduceByKeySpark優化並行
- 神奇的 SQL 之效能優化 → 讓 SQL 飛起來SQL優化
- 如何優化程式效能優化
- 前端效能優化之Lazyload前端優化
- Android 效能優化之記憶體優化Android優化記憶體
- Android效能優化篇之服務優化Android優化
- ASP.NET Core MVC 之模型(Model)ASP.NETMVC模型
- 發售一週後,如何看待《風來之國》?
- Android 效能優化(十二)之我為什麼寫效能優化Android優化
- MySQL效能最佳化之Open_Table配置引數的合理配置建議MySql
- 效能優化的主要內容列表優化
- PHP 效能優化 - php.ini 配置PHP優化
- [譯] 提高 10 倍效能:優化靜態網站優化網站
- 如何看待數字化?
- 如何使用 Set 來提高程式碼的效能
- 如何提高碼農產量,基於ASP.NET MVC的敏捷開發框架之自定義表單開發ASP.NETMVC敏捷框架
- JS效能優化 之 FOR迴圈JS優化
- 效能優化之拋棄Calendar優化
- React效能優化方案之PureRenderMixinReact優化
- Linux 效能優化之 cup 篇Linux優化
- Linux 效能優化之 IO 篇Linux優化
- React效能優化方案之PureComponentReact優化
- 4、React元件之效能優化React元件優化