2011年2月15日 星期二

2-8 網站的編譯模式

2-8-1 ASP.NET的編譯模式

 

        ASP.NET 2.0在預設的狀況下,是當我們將整個網站佈署到遠端之後(例如使用剛才介紹的佈署方式),在使用者第一次要求網頁的時候,才會編譯網站,這也是為什麼當我們將網站佈署上去之後,第一個使用者執行網頁的時候,速度會慢一點的原因。

        而第一次執行之後,網站編譯後的結果會被Cache起來,因此下一次執行的使用者就不需要編譯,速度就相對快的多。

        除了這種預設的方式之外,ASP.NET 2.0提供另外兩種先行編譯模式,分別是『就地先行編譯』,和『針對佈署先行編譯』。先行編譯網站的目的,主要的功能在於,當網站很大的時候,我們在網站佈署前,可以先執行網站編譯的動作,不然當網站正式上線的時候,第一個執行的使用者會比較慢,因為會花時間編譯,甚至可能TimeOut,因此,當網站越來越大之後,先行編譯就顯得有所必要。

        另外,使用先行編譯的方式,可以保護您的原始程式碼 (.vb.cs)HTML(.aspx檔案),不被客戶看到,或是被駭客非法下載,以確保版權和安全性。

2-8-2 如何先行編譯網站

 

您可以在底下的資料夾中找到『aspnet_compiler.exe』:
C:\WINNT\Microsoft.NET\Framework\v2.0.50727
註:v2.0.50727.NET Framework的版本,您的正式環境中,版本可能與筆者不同。

接著,可以到命令列模式,執行該指令,下面這個指令會執行『就地先行編譯』動作:
//底下的指令將會進行先行編譯的動作
aspnet_compiler -v /IIS的虛擬路徑名稱
aspnet_compiler –v /EC

//底下的指令將會進行先行編譯的動作
aspnet_compiler -p "C:\SamplesPrimer\EC" -v /

//-v』參數會指定編譯器用來解析應用程式根目錄參考的根目錄 (例如,當我們在使用DataSource控制項指定資料庫位置時,常會使用到『~/App?xxxx.mdb』,其中的波狀符號 (~) 運算子既是)。當您指定 -v 參數的值為 / 時,編譯器會使用實體路徑當做根目錄解析路徑。

        就地先行編譯後的檔案,會存放在『C:\WINNT\Microsoft.NET\Framework\版本\Temporary ASP.NET Files』資料夾內:

        從這邊你會發現,ASP.NET 1.1 2.0的編譯模式很不相同,您可以檢視ASP.NET 2.0中編譯後的檔案所存放的資料夾,我們看裡面的內容:

ASP.NET的編譯程式會自動決定編譯後的dll檔案名稱。

2-8-3 針對網站佈署先行編譯

 

        您也可以針對網站的佈署先行編譯,用底下的方式,明確的指定編譯後的檔案所要存放的目標路徑:
'-u參數後面,可以明確定指定編譯後的檔案所要存放的目標路徑
aspnet_compiler -p "C:\SamplesPrimer\EC" -v / -u 目標路徑

        並且當您明確的指定編譯後的檔案所要存放的『目標路徑』,編譯程式就會在該目標路徑產生編譯好的檔案,如果您使用『-u』參數,編譯時會參考目標路徑,將可只編譯修改過後有差異的部分,以加快編譯速度。

        編譯後的檔案內容如下,您會發現熟悉的『Bin』資料夾出現了,依舊是存放.dll檔案的位置:

         
        但是若您開啟.aspx檔案,則會驚訝的發現,檔案內容不見了,只剩下短短一行字:

這是由先行編譯工具產生的資料標記檔,不應該加以刪除!


        這表示,經過先行編譯後的專案,會移除.vb(.cs)程式碼檔案,只留下網站上需要的部分。此外,還會將.aspx的內容清空,確保網站上的程式碼和HTML碼都不會被竊取,而.dll檔案也會透過編譯程式自動命名:

        您也會發現,網站需要的圖檔和資料庫檔案,則不會被刪除,因此,您可以直接利用剛才編譯過的檔案進行佈署。

2-8-4 佈署先行編譯後的檔案

 

        您可以直接以Copy的方式,將剛才經過先行佈署後的目標路徑下的所有檔案(也就是目標路徑下整個資料夾的內容),直接複製到IIS虛擬路徑所指向的資料夾位置,即可完成佈署。
這樣的佈署有著幾個相當大的好處:
Ø   程式碼(.vb.cs)不至於被駭客竊取,也不會被客戶看到。
Ø   HTML(.aspx)檔案內容也不會被客戶看到。
Ø   加快執行速度。

這個編譯模式的改變,有效的確保了版權並增進網站的安全性。

沒有留言:

張貼留言