如何讓 .NET 的網站 或 WebService 第一次啟動變快 ver 2014 ( IIS 啟動模式 ) v2

如何讓 .NET 的網站 或 WebService 第一次啟動變快 ver 2014 ( IIS 啟動模式 )

之前在做專案輔導的時候,很多朋友和團隊都有 ASP.NET 第一次載入很慢的困擾。

 

有稍微了解 ASP.NET 的生命週期和運作機制的朋友知道, ASP.NET 基本上是採取動態編譯的方式來執行。

參考

 

當問到大家怎麼解決這個問題時,除了少數會做 Precompiler 或是 用排程的方式強制執行外,也有很多是採取放牛吃草的狀態。

 

就算用了先行編譯但過一段時間後再連結網站,它還是會花比較多的時間載入。那是因為沒有人使用的情況下 IIS 進行了「資源釋放」的動作,這個是非常必要而且也是確保資源會被回收的動作。 ( 避免 memory leak 發生 )

 

所以,自然就有朋友在 IIS 上設定排程的方式強制重新載入,但這個做法卻會有非常大的風險,因為您無法得知現在系統裡面是否有人正在執行?若真的有人在裡面的話,裡面的人就會被強制登出剛剛所有做的作業全部都消失的風險。

 

那麼正確的做法應該要怎麼做?自從 ASP.NET v4.0 以後只要簡單的設定就可以搞定這個問題,讓您的系統日後不用再擔心第一次很慢的問題 。

 

基本要滿足幾個條件

一、.NET CLR 必須是 4 以上的版本

二、pool 必須要是「整合模式」 ( 傳統的不行,因為 isapi 的限制 )

三、在 pool 的進階設定中的「啟動模式」要改成 AlwaysRunning 

四、Web 站台的進階設定中「預先載入已啟用 PreloadEnable」必須是 True  ( 感謝 Charles 提醒 )

 

就可以了 微笑 是不是很簡單

另外,Web Service 或是 WCF 這種服務類的更適合這個做法喔! 請務必要開啟來試試看,連接服務的時候就不會覺得第一次特別久。

image

 

image

 

 

同場加映實際的效能改善比較

想說都設定好了,還是用 IE 11 的網路效能分析來跑一下結果

 

image

沒有設定的時候,第一次要 7 秒

image

有設定的時候,第一次不到 1 秒  ( 不用懷疑,真的是第一次 微笑 )

image

當然第二次載入就更快了微笑  

 

 

 

 

詳細的部分可以參考 MSDN

http://msdn.microsoft.com/zh-tw/library/ee677261(v=azure.10).aspx