.NET MVC Razor View Performance issue

  • 219
  • 0
  • 2018-11-27

為什麼要預編Razor View?

通常如果要查詢mvc render的速度增快,view這邊會建議將WebForm的ViewEngine拿掉,

只保留Razor View Engine,還有如果是c#的話,也移除掉.vbhtml,只保留cshtml

最後則是先預編razor view上去正式環境。

故事是這樣子的, 我們有個app是直接嵌入網站的畫面做為使用。

每次在demo的時候,第一次進去真的滿慢。

研究後將暫存的編譯目錄移出才發現, Razor view編譯是整個目錄的

所以那一個view的目錄會被parse, 然後每個view都變成一個.cs 最後成一個dll

然而Layout所在的目錄一樣會被parse然後也變成一個dll

算一算發現那一個功能進入點,第一次request時會有3x個view parse並編譯。

加上那頁很肥, view有10000行, 用razor跟那個大model綁定的欄位很多。

所以真的會滿慢, 看起來一定得先預編view上去到環境會比較好。 

整理一下View的動作

1. view所在的目錄裡cshtml會先parse成一個個.cs

2.同個目錄view產出的cs, 會編譯成一個dll

3.執行時, @html跟model綁定的欄位會有一些處理(效能耗損的地方, 這裡有cache機制)

有興趣的話, 可以在Web.config 設置tempDirectory到別處目錄。看看第一次response後目錄的變化

<compilation tempDirectory="">