asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET与ASP编译与解释的区别


发布日期:2023年02月02日
 
ASP.NET与ASP编译与解释的区别

月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是在程序的性能速度等方面的革命性的改进

上一篇:浅谈ASP.NET MVC中TempData的实现机制

下一篇:ASP.NET组件设计之传输机制浅析