选择预编译模型
?????? ASP.NET 提供了兩種用于預編譯網站的模型。本主題討論這兩種預編譯模型,并提供有關為 Web 應用程序選擇適當模型的指南。
決策矩陣
使用下表來幫助您決定要使用哪種編譯模型。本文檔后面將對每種編譯模型進行更詳細的說明。
| 快速開發應用程序而不考慮代碼的編譯。 | 使用默認編譯。 |
| 縮短對網站的首次頁請求的響應時間。 | 使用就地編譯或部署編譯選項之一。 |
| 分離源代碼和用戶界面 (UI) 代碼。 | 使用可更新 UI 的編譯。 |
| 在不更改源代碼的情況下修改 UI 代碼。 | 使用可更新 UI 的編譯。 |
| 從成品服務器移除所有源代碼和 UI 代碼。 | 使用不可更新 UI 的編譯。 |
| 通過替換特定程序集來更新應用程序。 | 使用固定名稱的編譯。 |
| 使用具有強名稱的程序集提高應用程序的安全性。 | 使用簽名的程序集編譯。 |
默認編譯
無需對 ASP.NET 應用程序執行任何手動編譯。默認情況下,ASP.NET 運行庫在 Web 瀏覽器首次請求應用程序中的頁時編譯 Web 應用程序。如果對應用程序中的文件進行了更改,則在下次請求頁時,ASP.NET 運行庫將確定已更改的文件的依賴項,并且僅重新編譯受更改影響的文件。
優點
使用默認編譯的優點包括:
-
簡單易用。ASP.NET 編譯器會為您完成所有工作。
-
當預編譯網站所需的額外步驟減慢了開發過程時,默認編譯是開發過程中可供選擇的最佳編譯模型。
缺點
使用默認編譯的缺點包括:
-
在首次請求網站時可能會導致大量延遲。
-
要求將源代碼文件存儲在成品服務器上。
-
對服務器上的網站目錄擁有文件系統訪問權限的任何人都可以獲取源代碼和 UI 代碼。
何時使用默認編譯
在下列情況下使用默認編譯:
-
在開發和測試網站時。
-
用于主要包含靜態信息的網站。
-
用于不經常更改的網站。
就地編譯
可以使用 ASP.NET 編譯工具 (Aspnet_compiler.exe) 預編譯 Web 應用程序。該編譯工具調用 ASP.NET 運行庫來編譯網站,其方式與用戶向網站請求頁時的方式相同。
如果對應用程序中的文件進行了更改,可以使用 ASP.NET 編譯工具重新編譯受影響的文件,也可以在下次向應用程序請求頁時重新編譯受影響的文件。
有關此編譯模型的更多信息,請參見如何:預編譯 ASP.NET 網站。
優點
使用就地編譯的優點包括:
-
縮短了網站對首次請求的響應時間。
-
無需特殊的部署步驟;編譯應用程序的過程完全就像從站點請求頁一樣。
缺點
使用就地編譯的缺點包括:
-
應用程序的所有源代碼必須存儲在成品服務器上。
-
對網站目錄擁有訪問權限的任何人都可以獲取源代碼和 UI 代碼。
何時使用就地編譯
在下列情況下使用就地編譯:
-
經常對網站上的頁進行更改。
-
將源代碼文件存儲在成品服務器上不存在顧慮。
-
想要縮短首次頁請求的響應時間。
可更新 UI 的預編譯
通過使用 ASP.NET 編譯工具的 -u 開關,可以將源代碼(.cs 和/或 .vb 文件以及 .resource 文件)編譯為 DLL 并保留 .aspx 文件中的 UI 標記以供更新。
在將網站部署到成品服務器后,無需重新編譯整個網站即可對 .aspx 代碼進行更改。
有關此編譯方法的更多信息,請參見如何:預編譯 ASP.NET 網站以進行部署。
優點
可更新 UI 的網站預編譯的優點包括:
-
縮短了網站對首次請求的響應時間。
-
用戶界面開發人員無需重新編譯整個網站即可修改網站的外觀和行為。
-
保護應用程序源代碼中包含的知識產權,以防止被對網站目錄擁有文件系統訪問權限的任何人意外看到。
缺點
可更新 UI 的網站預編譯的缺點包括:
-
在部署到成品服務器之前,需要執行單獨的編譯步驟。
-
對網站目錄擁有訪問權限的任何人都可以獲取應用程序 UI 代碼(.aspx 文件)中包含的知識產權。
-
多個頁不能引用同一 CodeFile 類。
何時使用可更新 UI 的預編譯
在下列情況下進行可更新 UI 的應用程序預編譯:
-
UI 設計人員與源代碼開發人員獨立工作。
-
源代碼包含要加以保護以防被意外看到的知識產權。
-
不想將源代碼存儲在成品服務器上。
不可更新 UI 的預編譯
ASP.NET 編譯工具可將應用程序的所有源代碼(包括 UI 文件,如 .aspx 和 .ascx 文件)編譯為部署在應用程序的 Bin 目錄中的 DLL。
有關此編譯方法的更多信息,請參見如何:預編譯 ASP.NET 網站以進行部署。
優點
不可更新 UI 的預編譯的優點包括:
-
縮短了網站對首次請求的響應時間。
-
保護應用程序源代碼和 UI 代碼中包含的知識產權,以防止被對網站目錄擁有訪問權限的任何人意外看到。
缺點
不可更新 UI 的預編譯的缺點包括:
-
在部署到成品服務器之前,需要執行單獨的編譯步驟。
-
對應用程序 UI 進行很小的改動就需要重新編譯整個網站。
何時使用不可更新 UI 的預編譯
在下列情況下使用不更新 UI 的網站預編譯:
-
UI 代碼中包含要加以保護以防被意外看到的知識產權。
-
只希望將已編譯的 DLL 放在成品服務器。
預編譯為固定名稱的程序集
ASP.NET 編譯工具對編譯期間生成的程序集使用隨機名稱。每次重新編譯應用程序,程序集的名稱就會更改。
由于程序集名稱會更改,因此為維護一個程序集就必須重新部署整個應用程序。通過使用 ASP.NET 編譯工具的 -fixednames 開關,可以為應用程序中的每個頁分別創建一個程序集。程序集的名稱在后續編譯時不會更改,因此可以創建只替換已更改的程序集的應用程序 Service Release。
由于使用 -fixednames 開關將為每個頁創建一個單獨的程序集,因此應限制應用程序中的頁數。
有關此預編譯方法的更多信息,請參見如何:使用 ASP.NET 編譯工具生成固定名稱。
優點
預編譯為固定名稱的程序集的優點包括:
-
每個程序集的名稱不會隨著多次編譯而更改,因而無需重新部署整個應用程序即可以替換特定的程序集。
-
對應用程序的次要更新可能更具有針對性。
缺點
預編譯為固定名稱的程序集的缺點包括:
-
需要分別為應用程序中的每個頁創建一個程序集。這可能會為包含許多頁的站點創建大量程序集。
何時預編譯為固定名稱的程序集
在下列情況下將網站預編譯為固定名稱的程序集:
-
需要在不替換整個應用程序的情況下維護 Web 應用程序。
預編譯為簽名的程序集
可以使用 ASP.NET 編譯工具創建可部署到服務器的全局程序集緩存 (GAC) 或應用程序的 Bin 目錄中的具有強名稱的程序集。使用簽名的程序集使得惡意用戶更難用惡意代碼替換應用程序的程序集。
有關此編譯方法的更多信息,請參見如何:為預編譯網站的程序集簽名。
優點
預編譯為簽名的程序集的優點包括:
-
通過使程序集更難被惡意代碼替換,簽名的程序集提高了應用程序的安全性。
缺點
預編譯為簽名的程序集的缺點包括:
-
共享開發環境中的密鑰管理可能很復雜。
-
程序集必須讓 ASP.NET 運行庫調用 AllowPartiallyTrustedCallersAttribute 屬性。
何時預編譯為簽名的程序集
在下列情況下將網站預編譯為簽名的程序集:
-
用戶有權訪問應用程序目錄或 GAC,并且能夠替換應用程序的程序集。
-
希望限制第三方替換代碼所生成的程序集的能力。
轉載于:https://www.cnblogs.com/valens/archive/2007/08/22/864696.html
總結
- 上一篇: Prototype1.5.1源代码解读分
- 下一篇: 程序员 :超越软件蓝领的七种武器