1-12 ASP.NET程序的编译模型
圣殿祭司的ASP.NET4.0专家技术手册
ASP.NET 4.0支持两种编译模型:动态编译(Dynamic Compilation)与预编译(Precompilation),让你来决定不同网站何时该用何种编译模型,不但灵活性提升,且若采用预编译网站,执行性能还可以更高。
1-12-1 ASP.NET网站动态编译
动态编译是用户第一次浏览网站时,ASP.NET会将网站程序编译成一个dll组件文件,后续的请求就会以此组件来响应,而编译过后的网站执行性能明显较未编译网站快上许多。
范例1-6 动态编译的证明
在此,示范程序若发生变动,则动态编译模型检测到变动,就会重新进行编译,而以新的内容响应请求,请参考DynamicCompilation.aspx程序,具体步骤如下。
在Page_Load中建立一行显示消息程序:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("ASP.NET动态编译Ver 1.0");
}
执行DynamicCompilation.aspx程序,结果如图1-39所示。
在不关闭浏览器的情况下,在Visual Studio中直接修改源程序,将原先的“ver 1.0”改为“ver 2.0”,然后保存,如图1-40所示。
Response.Write("ASP.NET动态编译Ver 2.0");
最后重新整理浏览器,在Refresh的一瞬间,可感觉到浏览器会稍微停顿一下,是因为系统检测到源文件有变动,故重新进行动态编译的缘故,最终界面显示最新的文字信息,如图1-41所示。
1-12-2 ASP.NET网站预编译
预编译(Precompile)是使用“ASPNET_Compiler.exe”命令预编译整个网站,一般来讲,它有如下的好处:
节省网页第一次编译的时间。动态编译的虽然有效加速ASP.NET网站整体性能,但许多用户或不明究里的初学者却抱怨第一次执行感觉好慢,而预编译连第一次编译的等待工作都省掉了。
(2)保护网页程序代码知识产权。动态编译可将Code-Behind程序编译进dll中,但是,若是以In-Line Code或HTML卷标开发的程序则是一点保护作用也没有;此外即便用Code-Behind模式开发Web应用程序,仍然会有许多标签曝露在.aspx中,例如,SqlDataSource连SQL命令都会显示在HTML之中。故通过预编译不但可将程序代码编译进去,甚至连.aspx网页中的HTML标签也可以一并编译,对于程序代码的保护多了一层保障。
而以下是微软对于预编译好处的说法。
(1)由于页面和程序代码文件不需在第一次要求时编译,因此用户可得到更快的响应时间,这对于经常更新的大型网站特别有用。
(2)用户浏览网页之前,识别编译时期错误的方法。
(3)不需源代码,即可建立可部署到实际执行服务器已编译网站版本的能力。
范例1-7 使用aspnet_compiler.exe预编译
那到底“ASPNET_Compiler.exe”指令该怎么用呢?例如,在IIS有一个虚拟目录网站“VS2010IDE”,在此要将它进行预编译,具体步骤如下。
在Windows的开始→Microsoft Visual Studio 2010→Visual Studio Tools下有一个“Visual Studio命令提示字符(2010)”,如图1-42所示。
执行以下预编译命令:
Aspnet_Compiler –v VS2010IDE c:\tmp\VS2010IDE -f
参数说明
“-v”是虚拟目录参数,“VS2010IDE”是虚拟目录名称,“c:\tmp\VS2010IDE”是指预编译后的程序文件的目的位置,「-f」是强制覆盖目标目录。
结果如图1-43所示。
用资源管理器查看C:\Tmp\VS2010IDE目录,里面只有.dll及.compiled两种类型的程序,完全看不到当初的C#源代码,如图1-44所示。
将预编译后的VS2010IDE目录,复制到另一台正式网页服务器的C:\Inetpub\wwwroot\目录下,再到IIS建立一个虚拟目录指向“C:\Inetpub\wwwroot\VS2010IDE”路径即可,这样就完成了网站部署。
警告 (1)aspnet_compiler.exe对于静态文件,如Web.config、文本文件、图片文件等不会
进行编译操作,而像数据库联机字符串请用aspnet_regiis.exe工具进行加密。
(2)网站预编译完成后,以后也不会触发重新动态编译,故请不要事后再加入新的.aspx
文件,那样不会有任何的作用。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。