iT邦幫忙

DAY 7
1

發開相關系列 第 7

[ASP.NET MVC]Razor Views 預編譯(Pre-Compile)[1]-加快第一次執行回應速度

  • 分享至 

  • xImage
  •  

ASP.NET 2.0之後的版本都有很貼心的功能,網頁部分是第一次執行時編譯,之後的瀏覽使用此編譯,好處是可以隨時編輯網頁,下次重新執行時又會再及時編譯,不需要透過Visual Studio編譯,但是缺點是第一次因為要執行編譯,回應會非常非常的慢,而且當網站一段時間沒有連線IIS會回收資源,所以常常隔天第一個使用系統人都比較幸運,要等ASP.NET及時編譯,當然也有另一個選項是所有的東西都預先編譯好,好處是全部都先編譯好了,執行時就不會在編譯,加快第一次執行的回應速度,壞處是必需使用Visual Studio編譯後才能更版,因為不是ASP.NET預設選項,設定的步驟不少,本編是針對ASP.NET MVC 3 的Razor View做預編譯設定。
同步發佈於:http://www.dotblogs.com.tw/wadehuang36/archive/2011/08/05/razor-pre-compile.aspx

ASP.NET 2.0之後的版本都有很貼心的功能,網頁部分是第一次執行時編譯,之後的瀏覽使用此編譯,好處是可以隨時編輯網頁,下次重新執行時又會再及時編譯,不需要透過Visual Studio編譯,但是缺點是第一次因為要執行編譯,回應會非常非常的慢,而且當網站一段時間沒有連線IIS會回收資源,所以常常隔天第一個使用系統人都比較幸運,要等ASP.NET及時編譯,當然也有另一個選項是所有的東西都預先編譯好,好處是全部都先編譯好了,執行時就不會在編譯,加快第一次執行的回應速度,壞處是必需使用Visual Studio編譯後才能更版,因為不是ASP.NET預設選項,設定的步驟不少,本編是針對ASP.NET MVC 3 的Razor View做預編譯設定。

ASP.NET MVC 3中Razor View做預編譯在寫這編時還沒有看到官方的做法,不過在社群中到是看到二套做法,都是要安裝Visual Studio Extension。
在Visual Studio 2010中打開擴充管理員,在線上圖庫中搜尋Razor,提供預編譯工具有以下這二套(如圖一)。

--Razor Generator
--Razor Single File Generator for MVC


圖一 Razor View預譯編工具
這二套做法不同,但結果是相同的,本編只介紹Razor Generator的使用,對Razor Single File Generator for MVC有興趣可上他的官網,教學很豐富。

使用Razor Generator
1.安裝套件。
2.新增ASP.NET MVC 3.0專案。
3.使用NuGet安裝PrecompiledMvcViewEngine。
4.在任一.cshtml檔案的屬性窗視中的自訂工具中輸入RazorGenerator,建置動作改成無。

5.之後此檔案在存檔後,就後直接編譯好。

除了減少執行時期的編譯時間外,還有因為每個View都是會預先編譯,所以View中的錯誤可以比較容易發現,雖然更改.csproj檔,設定MvcBuildViews屬性為true,也可以做到View編譯以檢查錯誤,但因為每一個編譯時要先將每個.cshtml檔案轉成.cs後再編譯,編譯會很慢,但本篇的作法是每次編輯檔案時就會產生.cs,編譯時不會照成太大的時間消粍。

發行網站
使用Viual Studio 2010的發行功能,匯出後你會發現匯出的資料夾少了Views(如果都有把建置動作改成無,就會如圖二),那些View去那裡了呢? 原來已經與Controller一樣都編譯同一個dll中。

如何載入dll中的View
安裝完PrecompiledMvcViewEngine後,會在參考中會看到增加了二個組件,PrecompiledMvcViewEngine與WebActivator,與App_Start中增加了PrecompiledMvcViewEngineStart.cs檔案。
PrecompiledMvcViewEngine.dll 提供ViewEngine,註冊組件,讓使用System.Web.Mvc.ViewEngines FindView時可以找到dll中的View。
WebActivator 是可以讓Web啟動時執行某些程序,可參考黑大的WebActivator - 不修改Global.asa也能加入Application_Start。
PrecompiledMvcViewEngineStart.cs 組件註冊的相關程式都寫在這裡。

參考資源
http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html


上一篇
NuGet系列-程式碼轉換支援
系列文
發開相關7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言