asp.net|編譯|區別
2000年6月Microsoft公司發布.NET計劃以來,使編程工作在業界中引起了一次劃時代的革命。ASP.NET是.NET計劃中的一個重要組成部分,其為Web應用程式開發人員提供了許多新特性,這些特性包括已編譯的伺服器端代碼、一種將伺服器端邏輯與用戶端布局相分離的程式碼後置(code-behind)技術、可擴充的伺服器端控制項模型、設計資料繫結模型、xcopy部署以及客戶和伺服器上的表單身份證驗證支援等。
ASP.NET作為一種先進的Web應用程式開發技術,相對於ASP具有革命性的進步。其使用編譯後的語言(包括中繼資料、IL等資源),這是.aspx檔案運行效能大大提升的一個主要原因,也是ASP.NET不同於以往的ASP的顯著地方。ASP.NET第一次裝載頁面的速度較慢,但以後載入該頁面的速度是ASP不能比擬的,其速度飛快。這是因為ASP.NET在第一次訪問網頁時所需要開銷有:載入ASP.NET工作者進程,對.aspx 檔案進行文法分析並將其編譯成一個可執行檔程式集。這一點與ASP引擎執行伺服器代碼是不同的,因為ASP總是每次執行時都是將伺服器代碼交給Jscript或VBScript解譯器來進行解析。
ASP.NET在技術上沒有叫做ASP 4.0,但從許多方面來講,它就是ASP 4.0版本。我們可以從下面的兩個例子看出.aspx檔案與.asp檔案的相似之處:
常式1:ASPX頁面樣本
<!--File:test.aspx-->
<%@ Page language=’C#’ %>
<script runat=server>
int Add(int x, int y)
{
return x+y;
}
</script>
<html>
<body>
<table border=1>
<tr>
<td>兩數之和為:</td><td><%=Add(2,3)%></td>
</tr>
</table>
</body>
</html>
常式2:ASP頁面樣本
<!--File:test.asp-->
<%@ language=Jscript%>
<script language=’JScript’ runat=server>
function Add(x,y)
{
return x+y;
}
</script>
<html>
<body>
<table border=1>
<tr>
<td>兩數之和為:</td><td><%=Add(2,3)%></td>
</tr>
</table>
</body>
</html>
以上兩個常式的<html></html>裡的代碼是相同的,不同的是 <%%>聲明使用的語言。兩段代碼都是在伺服器端運行,但是,當訪問這兩個檔案時,其背後所發生的事情卻截然不同。我們先來分析test.asp檔案的運行機制,當執行test.asp檔案時,伺服器對網頁中的文本要進行線性解析,提取所有不是伺服器端指令碼的內容並作為響應返回,而網頁中的伺服器端指令碼(我們在test.asp檔案的指令碼中加入了runat=server屬性)首先要通過Jscript解譯器來解析執行,執行結果作為響應返回。所以,.ASP檔案的運行機制在幾個方面影響了網頁產生(也就是我們平時所說的程式運行)速度變慢。影響.ASP網頁效率的幾個方面是:首先,隨機解釋伺服器端指令碼比在伺服器上執行先行編譯的代碼效率更低,因此,要對ASP應用程式進行最佳化,比較通用的方法就是將大量的伺服器端指令碼移入先行編譯的COM組件中,這樣就可以有效提高網頁的響應速度;第一的方面是,由於要不斷地調用解譯器,混合使用靜態HTML和伺服器端求值語句指令碼塊比只用一個伺服器端指令碼塊的效率更低,因此,為了提高應用程式的執行效率,有些ASP開發人員通常使用Response.Write()調用取代靜態HTML元素。最終導致了一個ASP頁面上使用多種指令碼語言來編寫從而大大降低了應用程式的執行效率。現在,我們再來分析一下test.aspx檔案的運行機制,在該例中使用c#語言來編寫的指令碼,所以在伺服器端CLR使用相應的C#編譯器把這些代碼編譯成一種叫做IL組合語言並儲存到程式集中。使用CLR,無論你使用何種語言(C#、VB.NET、Jscript 等)編寫的指令碼,最終都被編譯成IL組合語言。
程式集中既包括伺服器端代碼又包括靜態HTML語句,因此,只要第一次訪問了某個.ASPX頁面,以後產生該頁面時只需執行已編譯好的代碼即可。就是ASP.NET網頁最終都被編譯成.NET類(.NET架構中組件也叫做類),所以,在一個.aspx檔案中不可能使用多種伺服器端語言,這樣就解決了傳統的ASP指令碼模型的所有有關效率低的問題。所以說,ASP.NET是ASP的升級版本。
與解釋模型相比,使用編譯模型還有其他方面的好處:1、在效能方面編譯模型優於解釋模型。因為,編譯器將網頁編譯成類(組件),這樣就可以用傳統型應用程式或組件開發人員使用的同樣的調試工具進行調試。2、便於應用程式在編譯時間可以發現錯誤,這樣就可以使應用程式的健壯性大大增強。3、.NET應用程式開發人員可以使用的所有工具,.aspx開發人員同樣可以使用。總而言之,從傳統的ASP過度到ASP.NET,是在程式的效能、速度等方面的革命性的改進。