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