Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET 2.0的编译模型

ASP.NET 2.0的编译模型2010-11-25 Csdn博客 钢钢ASP.NET 2.0支持两种编译模型(Compilation Model):一为动态编译 (Dynamic Compilation),另一个为先行编译(Precompilation)。

这让程序设计师可以有更宽广的选择以决定不同网站何时该用何种编译模型 ,不但弹性大大提升,且若采用先行编译网站执行效能还可以更高,分述如下:

(一)ASP.NET网站动态编译(Dynamic Compilation)

在ASP.NET 1.0时就已经支持网站动态编译,也就是使用者第一次请求网站网 页时,ASP.NET会先将网站程式编译成一个.dll组件档,而后续的请求就会以此 来回应,而编译过后的网站执行效能明显较未编译网站快上许多。

然而,虽说ASP.NET 1.0具有动态编译的特性,但它只支持如.aspx、.ascx、 web.config或global.asax这几种档案类型,只要它们有异动就会触发系统进行 动态编译,但这个模式有个很明显的问题存在,就是像bin目录下的组件、资源 档、Web Services等等在程式设计阶段也常进行修改,但这些档案即使用异动也 不会触发系统重新进行编译,因此每每VS.NET 2003的专案有修改异动,必须手 动重新编译整个专案,如此使用浏览器执行网页才会显示最新修改的程序页面。

但是可能不少人嫌烦或者是初学者根本不知道修改后要手动重新编译,因此 微软针对动态编译又再进行了更人性化的改良,现在针对类别、Web Service、 具型别的DataSet、Master Page、Themes也支援异动时的动态编译,各位只要针 对IE浏览器重新Refresh就会自动触发系统进行重新编译,看到的也当然是最新 的画面,省去程序员必须手动进行编译,算是一个贴心的改良。

ASP.NET 2.0动态编译和ASP.NET 1.0很像,但是更完美了,且当您建造 (Build)整个Web网站后,在bin目录并不会产生.dll的专案程式,许多ASP.NET 1.0的程序员开始惊慌、疑惑与不安,为什么找不到专案.dll?没有.dll档要如 何部署网站?等等的疑惑,其实没什么好疑惑的,各位之所以会疑惑是因为你把 ASP.NET 1.0当作是通用的标准,凡是违反它的作法皆为异类,进而ASP.NET 2.0 的动态编译就成为您眼中的“异类”,但那是人的执着心与本位主义 作崇的关系,事实上ASP.NET 2.0的动态编译才是更完美,完美到根本不再需 要.dll,只要有使用者进行请求时(Request),系统会自动进行动态编译(仍 然看不见.dll档),所以若您要部署网站时,利用复制网站工具 将.aspx、.aspx.cs、Web.config、类别档全部复制一份到新网站就行了(唯独 没有.dll档),剩下的事情动态编译会替您全部打理好。

(二)ASP.NET网站先行编译(Precompilation)

除了上面所讲的动态编译外,ASP.NET 2.0尚提供先行编译(Precompilation )网站的功能,它透过“ASPNET_ Compiler.exe”这个指令来预先编 译整个网站,我们用通俗观点来说明这样的做法有几个好处:

(1)节省网页第一次编译的时间。以往在ASP.NET 1.0这个编译的机制虽然有 效加速ASP.NET网站整体性能,但许多使用者或不明究里的初学者却抱怨第一次 执行感觉好慢,而预先编译整个网站是连第一次都省掉了,大概也不会有人再抱 怨这个问题了。

(2)保护网页源代码的智慧财产。在ASP.NET 1.0时可以将Code Behind编译进 dll之中,但是若是以In-Line Code开发或HTML标识开发的程式则是一点保护作 用也没有;此外即便您用Code Behind模式开发Web应用程式,仍然会有许多标识 会产生在.aspx之中,这种情况尤以ASP.NET 2.0更甚,如SqlDataSource连SQL命 令都会显示在HTML之中;故透过预先编译不但连源代码都可以编译进去,甚至连 .aspx网页中的HTML标识也可以一起编译进去,对于源代码的保护可以说多了一 层保障与选择。

然而,我们来看看微软对于先行编译好处的官方说法:

(1)由于页面和程式码档不需在第一次要求时编译,因此使用者可得到更快的 响应时间,这对于经常更

新的大型网站特别有用。

(2)使用者浏览网页之前,识别编译时间错误的方法。

(3)不需原始代码,即可建立可部署到实际执行服务器已编译网站版本的能力 。