天天看點

《聖殿祭司的ASP.NET4.0專家技術手冊》----1-12 ASP.NET程式的編譯模型

本節書摘來自異步社群《聖殿祭司的asp.net4.0專家技術手冊》一書中的第1章,第12節,作者: 奚江華,譯者: 武海軍 , 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

聖殿祭司的asp.net4.0專家技術手冊

asp.net 4.0支援兩種編譯模型:動态編譯(dynamic compilation)與預編譯(precompilation),讓你來決定不同網站何時該用何種編譯模型,不但靈活性提升,且若采用預編譯網站,執行性能還可以更高。

動态編譯是使用者第一次浏覽網站時,asp.net會将網站程式編譯成一個dll元件檔案,後續的請求就會以此元件來響應,而編譯過後的網站執行性能明顯較未編譯網站快上許多。

範例1-6 動态編譯的證明

在此,示範程式若發生變動,則動态編譯模型檢測到變動,就會重新進行編譯,而以新的内容響應請求,請參考dynamiccompilation.aspx程式,具體步驟如下。

在page_load中建立一行顯示消息程式:

執行dynamiccompilation.aspx程式,結果如圖1-39所示。

在不關閉浏覽器的情況下,在visual studio中直接修改源程式,将原先的“ver 1.0”改為“ver 2.0”,然後儲存,如圖1-40所示。

<code>response.write("asp.net動态編譯ver 2.0");</code>

《聖殿祭司的ASP.NET4.0專家技術手冊》----1-12 ASP.NET程式的編譯模型

最後重新整理浏覽器,在refresh的一瞬間,可感覺到浏覽器會稍微停頓一下,是因為系統檢測到源檔案有變動,故重新進行動态編譯的緣故,最終界面顯示最新的文字資訊,如圖1-41所示。

《聖殿祭司的ASP.NET4.0專家技術手冊》----1-12 ASP.NET程式的編譯模型

預編譯(precompile)是使用“aspnet_compiler.exe”指令預編譯整個網站,一般來講,它有如下的好處:

節省網頁第一次編譯的時間。動态編譯的雖然有效加速asp.net網站整體性能,但許多使用者或不明究裡的初學者卻抱怨第一次執行感覺好慢,而預編譯連第一次編譯的等待工作都省掉了。

《聖殿祭司的ASP.NET4.0專家技術手冊》----1-12 ASP.NET程式的編譯模型

(2)保護網頁程式代碼知識産權。動态編譯可将code-behind程式編譯進dll中,但是,若是以in-line code或html卷标開發的程式則是一點保護作用也沒有;此外即便用code-behind模式開發web應用程式,仍然會有許多标簽曝露在.aspx中,例如,sqldatasource連sql指令都會顯示在html之中。故通過預編譯不但可将程式代碼編譯進去,甚至連.aspx網頁中的html标簽也可以一并編譯,對于程式代碼的保護多了一層保障。

而以下是微軟對于預編譯好處的說法。

(1)由于頁面和程式代碼檔案不需在第一次要求時編譯,是以使用者可得到更快的響應時間,這對于經常更新的大型網站特别有用。

(2)使用者浏覽網頁之前,識别編譯時期錯誤的方法。

(3)不需源代碼,即可建立可部署到實際執行伺服器已編譯網站版本的能力。

範例1-7 使用aspnet_compiler.exe預編譯

那到底“aspnet_compiler.exe”指令該怎麼用呢?例如,在iis有一個虛拟目錄網站“vs2010ide”,在此要将它進行預編譯,具體步驟如下。

在windows的開始→microsoft visual studio 2010→visual studio tools下有一個“visual studio指令提示字元(2010)”,如圖1-42所示。

執行以下預編譯指令:

<code>aspnet_compiler –v vs2010ide c:\tmp\vs2010ide -f</code>

參數說明

“-v”是虛拟目錄參數,“vs2010ide”是虛拟目錄名稱,“c:tmpvs2010ide”是指預編譯後的程式檔案的目的位置,「-f」是強制覆寫目标目錄。

結果如圖1-43所示。

《聖殿祭司的ASP.NET4.0專家技術手冊》----1-12 ASP.NET程式的編譯模型

用資料總管檢視c:tmpvs2010ide目錄,裡面隻有.dll及.compiled兩種類型的程式,完全看不到當初的c#源代碼,如圖1-44所示。

《聖殿祭司的ASP.NET4.0專家技術手冊》----1-12 ASP.NET程式的編譯模型

将預編譯後的vs2010ide目錄,複制到另一台正式網頁伺服器的c:inetpubwwwroot目錄下,再到iis建立一個虛拟目錄指向“c:inetpubwwwrootvs2010ide”路徑即可,這樣就完成了網站部署。

警告 (1)aspnet_compiler.exe對于靜态檔案,如web.config、文本檔案、圖檔檔案等不會

進行編譯操作,而像資料庫聯機字元串請用aspnet_regiis.exe工具進行加密。

(2)網站預編譯完成後,以後也不會觸發重新動态編譯,故請不要事後再加入新的.aspx

檔案,那樣不會有任何的作用。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。