我有一个部署到IIS的ASP.NET(非MVC)站点.我已经设置了预编译选项(用于部署/发布).设置如下图所示.我尝试过以下设置的变化,从表面上看,我没有看到这样做的任何重大改进.为了测试,我正在将预编译和非预编译部署到两个不同的IIS站点.我进入并回收每个站点的应用程序池(或IIS重置)…在这之后我分别打了两个站点,它们都需要花费同样长的时间来渲染第一个页面加载(即缓存应用程序池?),以及然后对其他aspx页面的后续调用花费大约相同的时间(在预编译与非预编译中).我错过了什么吗?预编译是否仅适用于大型站点?挖掘一个中型站点,具有API调用,数据库调用等.
应用程序池回收后,是否需要特定的设置来改善首次点击网站的加载时间?或者一般来说,改善尚未编译的aspx或ascx的首次响应时间?
解决方法
“预编译”和“未预编译”之间的区别在于,“未预编译”的网站页面将在首次请求通过.net编译器(csc.exe / vbc.exe)对每个页面进行动态编译,您实际上可以在任务管理器的进程选项卡中看到它们弹出窗口).所以每个页面都需要一次编译时间,但通常可以忽略不计.如果您的网站在/ app_code目录中也有代码文件,那么这些代码文件也会在网站启动之前编译,因此初始启动应该比“预编译”版本略慢.也就是说,如果您在web.config中的“非预编译”网站的编译元素将“batch”属性设置为false,否则它将花时间在启动时编译所有页面,这可能需要很长时间,具体取决于您的大小现场.
compilation Element (ASP.NET Settings Schema)
在/ app_code文件之后,例如,default.aspx在“未预编译”的网站中编译,但两者之间的实际性能没有差别.
IIS重置或应用程序池回收也不会显示任何差异,因为在部署一个并运行它们之后,两个站点都会被编译. IIS重置/应用程序池重置不会导致重新编译“未预编译”的站点,只会更改文件/重新部署.
看看Understanding ASP.NET Dynamic Compilation,重要的是要了解比较两者的作用.