2

我最近在詢問我目前工作的地方前首席開發員,爲什麼他選擇使用剃刀發電機到一個單獨的程序預編譯我們的意見。剃刀發電機:這是否準確?

他下面提出了一些要求,但我似乎無法找到任何剃刀發電機型材和/或度量網絡備份的要求上(快10-100倍),和/或,如果什麼IIS7/ASP.NET在幕後有關預編譯視圖和運行時編譯視圖及其好處或缺乏。

任何人都可以指向正確的方向嗎?還是評論?

在我看來,(只要啓動時間而言)簡單地設置IIS autostart = true的網站會平衡掉的使用剃刀發電機預編譯任何好處。這是他的聲明:

爲什麼我們使用Razor Generator來預編譯視圖,爲什麼把它們放在一個單獨的程序集中?

第一個是簡單的編譯時錯誤檢查。有了這許多意見 它似乎是避免生產錯誤的好方法。這有點 沮喪不得不重新編譯看到我 承認的意見的變化,但它是(在我看來)完全值得知道你 有更多的錯誤檢查前期。

第二個問題是,當視圖未在項目中編譯時,它們在運行時得到編譯,然後編譯的表示將 存儲在ram中。有時,如果他們不是經常訪問 (這是大多數這樣的意見,因爲有這麼多) 那些存儲的編譯版本被廢棄和垃圾收集到 保存ram。因此,除了最頻繁訪問的網站(如 gaf.com)之外的所有視圖最終都會在每次訪問時重新編譯。但如果 你把他們放在一個項目編譯版本只需要從dll加載 如果它尚未在內存中(是的代碼可以是垃圾 也收集了,但較少)。從dll加載10 - 100 快(這是來自Razor Generator項目的網站 - 我 沒有自己驗證,但這聽起來很合理)。

+1

他的所有觀點都是技術性的。隨時閱讀我的​​經驗和解決方案http://stackoverflow.com/questions/14866711/asp-net-mvc-mvcbuildviews-increasing-compile-time-drastically/14867003#14867003 –

+0

爲什麼不把它作爲迴應,所以我可以將其標記爲答案,如果您拋出如何預編譯堆棧直至iis7自動啓動? – gangelo

+0

我希望這能說明問題... –

回答

6

我們正在努力解決同樣的問題。我們開始編譯視圖,以便發現在集成測試UX測試期間會在我們身上蔓延的明顯問題。更糟糕的是,這些bug以某種方式悄悄進入生產。

但是,我們的構建時間變得無法容忍。我們的開發人員構建了無數次,併成爲我們今天的主要部分。我們在午餐後開玩笑說測試,所以在我們外出時可以完成構建。

我們最終搬到UX測試之前建設。


現在我們正在進行預編譯。我們團隊中只有一個人現在採用了它,顯然預編譯明顯優於構建(增量與總量)。設置基本上是一個nuget獲取。

這些文章應該是一個良好的開端

http://stacktoheap.com/blog/2013/01/19/precompiling-razor-views-in-asp-dot-net-mvc-3/

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


預編譯爲我們提供了部署準備生成的二進制文件的所有優點。第一次觀看時,我們的用戶不會遇到瞬間延遲。

據我所知IIS autostart = true將啓動你的應用程序池,但不會強制編譯你的視圖。因此,第一個用戶使用每個視圖時,您將剩下初始啓動命中。