使用 asp.net 開發網站時.都會發現發佈到 IIS 上後,總是第一次進入網站時會很慢,載入後繼續瀏覽頁面就又很快.但是過一陣子之後,再次連線可能又變得很慢.
這是因為 IIS 預設 20 分鐘沒有 Request 進來,就會把網站應用程式停止,釋放資源不佔記憶體,降低 IIS 主機的資源負載.直到下一個 Request 連進來時,又再自動載入相關的 DLL 啟動網站.
這尤其在一 IIS 上架設了好幾個網站的 Hosting 類型主機服務,能夠很有效的將主機資源動態分配到正在被瀏覽的網站上.
但是這樣在使用者體驗上感覺就很糟 (雖然只有第一個進入系統的衰鬼?) .或者是當你網站開發好,要去 Demo 給客戶看時跑很久就很尷尬 (那我 Demo 前自己先連一次不就好了?嗯...)
其實我們可以透過 IIS 的 Application Initialization 模組功能,解決掉這個第一次進系統要跑很久的問題
要達到這樣的設定主要有 3 個部分需要處理 (這邊以 IIS 8.0 以上版本為例,較舊版本可搜尋 "IIS Warm Up" )
- 安裝 IIS 的「應用程式初始化 (Application Initialization)」模組
- 網站的進階設定「預先載入已啟用」設為 True
- 網站使用的應用程式集區的進階設定「啟動模式」設為 AlwaysRunning
1. 安裝 IIS 的「應用程式初始化 (Application Initialization)」模組
使用新增角色及功能精靈,將 IIS 的應用程式初始化 (Application Initialization) 模組安裝起來.
這項功能在以往 IIS 7.5 (含) 以前的版本,叫做 Warm Up,且需要另外下載安裝.現在在 IIS 8.5 開始,已改名為「應用程式初始化 (Application Initialzation)」.
2. 網站的進階設定「預先載入已啟用」設為 True
至 IIS 網站的進階設定,將「預先載入已啟用」設為 True.
3. 網站使用的應用程式集區的進階設定「啟動模式」設為 AlwaysRunning
至 IIS 網站使用的應用程式集區的進階設定,將「啟動模式」設為 AlwaysRunning.
透過上述設定即可解決第一個進入系統的人需要等很久的問題了.