熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET與ASP編譯與解釋的區別

2013-11-13 10:23:39  來源: .NET編程 

  月Microsoft公司發布NET計劃以來使編程工作在業界中引起了一次劃時代的革命ASPNET是NET計劃中的一個重要組成部分其為Web應用程序開發人員提供了許多新特性這些特性包括已編譯的服務器端代碼一種將服務器端邏輯與客戶端布局相分離的代碼隱藏(codebehind)技術可擴展的服務器端控件模型設計數據綁定模型xcopy部署以及客戶和服務器上的窗體身份證驗證支持等

  ASPNET作為一種先進的Web應用程序開發技術相對於ASP具有革命性的進步其使用編譯後的語言(包括元數據IL等資源)這是aspx文件運行性能大大提升的一個主要原因也是ASPNET不同於以往的ASP的顯著地方ASPNET第一次裝載頁面的速度較慢但以後加載該頁面的速度是ASP不能比擬的其速度飛快這是因為ASPNET在第一次訪問網頁時所需要開銷有加載ASPNET工作者進程aspx 文件進行語法分析並將其編譯成一個可執行的程序集這一點與ASP引擎執行服務器代碼是不同的因為ASP總是每次執行時都是將服務器代碼交給Jscript或VBScript解釋器來進行解析

  ASPNET在技術上沒有叫做ASP 但從許多方面來講它就是ASP 版本我們可以從下面的兩個例子看出aspx文件與asp文件的相似之處

  例程ASPX頁面示例

  <!File:testaspx>

  <%@ Page  language=C# %>

  <script  runat=server>

  int Add(int x int y)

  {

  return x+y;

  }

  </script>

  <html>

  <body>

  <table border=>

  <tr>

  <td>兩數之和為</td><td><%=Add()%></td>

  </tr>

  </table>

  </body>

  </html>

  例程ASP頁面示例

  <!File:testasp>

  <%@  language=Jscript%>

  <script  language=JScript  runat=server>

  function  Add(xy)

  {

  return x+y;

  }

  </script>

  <html>

  <body>

  <table border=>

  <tr>

  <td>兩數之和為</td><td><%=Add()%></td>

  </tr>

  </table>

  </body>

  </html>

  以上兩個例程的<html></html>裡的代碼是相同的不同的是 <%%>聲明使用的語言兩段代碼都是在服務器端運行但是當訪問這兩個文件時其背後所發生的事情卻截然不同我們先來分析testasp文件的運行機制當執行testasp文件時服務器對網頁中的文本要進行線性解析提取所有不是服務器端腳本的內容並作為響應返回而網頁中的服務器端腳本(我們在testasp文件的腳本中加入了runat=server屬性)首先要通過Jscript解釋器來解析執行執行結果作為響應返回所以ASP文件的運行機制在幾個方面影響了網頁生成(也就是我們平時所說的程序運行)速度變慢影響ASP網頁效率的幾個方面是首先隨機解釋服務器端腳本比在服務器上執行預編譯的代碼效率更低因此要對ASP應用程序進行優化比較通用的方法就是將大量的服務器端腳本移入預編譯的COM組件中這樣就可以有效的提高網頁的響應速度第一的方面是由於要不斷地調用解釋器混合使用靜態的HTML和服務器端求值語句腳本塊比只用一個服務器端腳本塊的效率更低因此為了提高應用程序的執行效率有些ASP開發人員通常使用ResponseWrite()調用取代靜態的HTML元素最終導致了一個ASP頁面上使用多種腳本語言來編寫從而大大降低了應用程序的執行效率現在我們再來分析一下testaspx文件的運行機制在該例中使用c#語言來編寫的腳本所以在服務器端CLR使用相應的C#編譯器把這些代碼編譯成一種叫做IL匯編語言並保存到程序集中使用CLR無論你使用何種語言(C#VBNETJscript 等)編寫的腳本最終都被編譯成IL匯編語言程序集的生成過程如下圖所示

  

  由上圖可以看出程序集中既包括服務器端代碼又包括靜態HTML語句因此只要第一次訪問了某個ASPX頁面以後生成該頁面時只需執行已編譯好的代碼即可就是ASPNET網頁最終都被編譯成NET類(NET框架中組件也叫做類)所以在一個aspx文件中不可能使用多種服務器端語言這樣就解決了傳統的ASP腳本模型的所有有關效率低的問題所以說ASPNET是ASP的升級版本

  與解釋模型相比使用編譯模型還有其他方面的好處在性能方面編譯模型優於解釋模型因為編譯器將網頁編譯成類(組件)這樣就可以用桌面應用程序或組件開發者使用的同樣的調試工具進行調試便於應用程序在編譯時可以發現錯誤這樣就可以使應用程序的健壯性大大增強NET應用程序開發者可以使用的所有工具aspx開發者同樣可以使用總而言之從傳統的ASP過度到ASPNET是在程序的性能速度等方面的革命性的改進


From:http://tw.wingwit.com/Article/program/net/201311/13470.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.