利用IIS Application Initialization預啟動功能,來縮短ASP.NET網頁第一次的載入時間

應用程式初始化(Application Initialization)這個功能,是從IIS 7.5的「Application Warm-Up Module」開始發跡,直到IIS 8的時候,開始把這些功能內建到系統裡面,並一直沿用到現在。

應用程式初始化的重點是為了要解決ASP.NET長期以來的詬病,即為在執行緒重啟、系統休眠、重新編譯、重新開機等因素下,第一位使用ASP.NET網站的人員會進入重新編譯,視網站規模情況,可能會延滯10秒甚至更久的時間才會看到畫面,第二位進入畫面後就會很快了,但第一位出現的這個短暫延滯的問題,還是讓許多網站的開發者備受終端用戶的責難。應用程式初始化就是幫你先跑一次,就是這樣而已。

開啟IIS網站應用程式預熱功能

Step 1. 開啟伺服器管理員>網頁伺服器(IIS)>網頁伺服器>應用程式開發,將應用程式初始化勾選起來,並使其完成安裝工作。

Step 2. 開啟IIS管理員>應用程式集區>挑選自己「正在運作」的應用程式>點選進階設定,在一般>啟用模式裡面,選擇「AlwaysRunning」。

Step 3. 另外在IIS管理員中,選擇自己現在正在運作的網站,點選進階設定後,進入一般>預先載入已啟用,請選擇「True」。

Step 4. 設定Web.Config的預編譯頁面與相關屬性,以下為簡單範例:

<system.webServer>
    <applicationInitialization doAppInitAfterRestart="true" remapManagedRequestsTo="/loading.html">
        <add initializationPage="/" />
        <add initializationPage="/login/" />
    </applicationInitialization>
</system.webServer>

說明:

  1. doAppInitAfterRestart:在IIS等級或系統等級重新啟動時,是否進行應用程式預先啟動的工作?
  2. remapManagedRequestsTo:在應用程式預先啟動的時期,要導向到哪個暫時說明頁面?(可省略)
  3. initializationPage:想要預先編譯的頁面,基本上它會尋訪單一層目錄下所有的可執行檔案,但不會尋訪子目錄。
  4. 有關於編譯的範圍與演算,建議與system.web>compilation設定裡面的batch、optimizeCompilations屬性搭配使用。

設定好之後,第一位使用者進入「我們認知內的範圍後」後再也不用等候了,雖然不完美,但也還算可以接受啦!

IIS ApplicationInitialization web.config 程式預先啟動 程式預熱 網頁加速 網頁延遲縮短