构建后导致高延迟页面加载的原因是什么?

时间:2013-09-23 15:20:41

标签: asp.net iis build-process continuous-deployment

当我们尝试进行更频繁的构建时(以及我们的网站流量增加),我们注意到在较高流量时,初始构建后页面会将峰值加载到20或30秒。我们的构建是通过将DLL的+ PDB复制到单个服务器来发布的,该服务器与另一个服务器同步。该文件复制通常需要几秒钟。

这种初始延迟峰值的影响因素是什么?是否有任何常用的步骤来避免这个问题? (我无法想象每天执行多个构建的高流量站点,如果不是多个构建/小时,则容忍这种事情。)

1 个答案:

答案 0 :(得分:2)

这种延迟的主要原因是ASP.Net在第一次加载时在页面上进行编译,将aspx标记转换为代码。

您可以通过在构建期间进行预编译来解决此问题(并且实际上已列为此链接的第一个优势)。当然,与此相关的是更长的构建时间。更多信息请访问:http://msdn.microsoft.com/en-us/library/bb398860(v=vs.100).aspx

如果您正在使用MSBuild通过使用MSBuild中的AspNetCompiler任务来处理CI构建:http://msdn.microsoft.com/en-us/library/ms164291.aspx

它具有的另一个优点(以及为什么我倾向于在开发版本中使用它),如果你将它集成到你的构建过程中,并且你最终在页面上出现语法错误,那么构建将失败,而不是你的用户是第一个抓住它的人。

回应您的评论(我的回复时间太长,无法发表评论):

实际上,到目前为止,我甚至都不知道批量设置。看起来将batch设置为false在开发期间有意义,以减少那里的初始加载时间。但是,似乎这样做会使asp.net功能处于每页组装模式,这可能会减慢较大的应用程序的速度。因此,最好的妥协可能是在开发环境中,将batch设置为false以加快开发时间,然后使用web.config转换将其设置为true以进行生产,并在使用期间使用预编译器。生产建设。然后,您只需为两台服务器支付一次预编译费用,并以用户不可见的方式支付。