ASPNET x的開發人員常常聽到用戶抱怨首次調用應用程序的時候會碰到初始化延遲畢竟初次請求會引發一個系列過程包括運行庫初始化分析把ASPX頁面編譯成中間語言把方法即時編譯成本地代碼等等
自從ASPNET面市以來開發人員一直都在要求(微軟)出台一個解決辦法而ASPNET 利用預編譯提供了一個有效的解決方案
預編譯選項
在首次啟動應用程序的時候ASPNET會動態地分析和編譯所有的ASPNET文件(aspx頁面)運行環境要對編譯的結果進行緩沖以便更好地服務未來所有的請求
在服務器重啟或者Web服務器重啟之後第一次啟動應用程序也意味著這一過程要重新開始而且對應用程序任何文件的改變都會被系統檢測到而在文件發生改變之後首次運行應用程序也會讓這一過程再次發生
很多Web開發人員都很討厭這種初始化延遲而預編譯通過(預先)編譯應用程序避免了這種延遲
命令行
通過安裝在NET框架裡的aspnet_compilerexe程序就能夠啟動預編譯它位於框架安裝目錄下(版本號會根據安裝的框架的版本而有所不同)下面就是這個程序默認的路徑
C\\\\MicrosoftNET \\Framework\\v\\aspnet_compilerexe
您可以用?這個命令參數查看該程序的所有參數列表下面我就解釋一下一些可用的參數
m這個參數表示您將使用完整的應用程序將被預編譯的IIS元數據庫路徑IIS元數據庫的路徑是/LM/WSVC//Root/應用程序名
v使用需要預編譯Web應用程序的虛擬IIS路徑虛擬路徑的格式是/應用程序名
p使用需要預編譯Web應用程序的物理IIS路徑它是包括驅動器名和指向應用程序目錄的完整路徑舉個例子c\\inetpub\\wwwroot\\應用程序名v這個參數必須和p一起用所以編譯器能夠解析任何應用程序的根參考
f表示目標目錄是否要被覆蓋
u用來設置預編譯完的應用程序是可以更新的這表示所有的標記文件(ASPXASCX等等)都可以在目標目錄裡進行更新
targetDir用於預編譯應用程序文件的目標目錄下面的命令用虛擬路徑和指定的目標路徑預編譯了一個應用程序aspnet_compilerexe –v /應用程序名 c\\目標目錄名
如果沒有指定目標目錄那麼結果文件會被放在ASPNET的臨時文件目錄裡就像在ASPNET運行庫在首次調用應用程序的時候處理編譯一樣臨時目錄默認的路徑如下
cWindows\\MicrosoftNET\\Framework\\v\\Temporary>\\Windows\\MicrosoftNET\\Framework\\v\\Temporary ASPNET Files\\應用程序名
預編譯另外一個好處是能夠捕捉在應用程序啟動階段發生的任何錯誤錯誤會顯示在工具裡但是不會終止編譯過程
隱藏源代碼
預編譯的另外一個副產品是能夠隱藏任何或者所有的應用程序源代碼這意味著其他的開發人員需要利用反編譯程序或者ilasm才能夠取得您的代碼這就行了——預編譯讓您能夠以二進制文件的形式分發應用程序
目標目錄裡沒有源代碼App_Code文件夾裡的所有類都被編譯成一個或者多個二進制文件放到bin目錄下目標目錄下不會有源代碼文件(csvbjs等等)此外所有的主頁面文件也會被編譯到bin目錄下作為隱藏文件 ASPXASCX和ASHX文件的所有代碼和標記以及相關的代碼隱藏文件都被放在bin目錄下的一個或者多個程序集裡
隱藏源代碼是毀譽參半其他的開發人員無法以任何形式查看或者更改應用程序——即使是Web頁面標記也不行而另外一方面對應用程序的任何改變(不論大小)都要求改變原始的源代碼重新編譯和重新部署這可能是一個十分耗時的過程所以並不一定適用於所有的應用程序
可更新命令參數(u)讓您能夠取代這個默認的行為使用這個參數意味著所有的標記文件 (ASPXASCX等等)都要包括在預編譯過程的輸出裡一旦應用程序被部署這些文件仍然能夠用於編輯和更新在應用程序被應用之後小的布局問題可以通過源文件來處理所以這是一個非常理想的參數
Visual Studio的支持
在使用Visual Studio 開發基於ASPNET的應用程序時預編譯是可選的發布Web站點(Publish Web Site)菜單選項讓您能夠把網站作為一個預編譯應用程序推到另一個位置此外上面還有一個復選框讓您設置可更新選項
總結
ASPNET 的預編譯選項讓您能夠預編譯Web應用程序以避免(像一般編譯一樣)首次調用應用程序的延遲此外它還提供了一定的安全性因為程序的源代碼在結果中是不可見的所有的內容文件都可以被隱藏
From:http://tw.wingwit.com/Article/program/ASP/201311/21842.html