随着我们尝试进行更频繁的构建(并且随着我们的网站流量增加),我们注意到在更高的流量期间,初始构建后页面加载会飙升至 20 或 30 秒。我们的构建是通过将 DLL + PDB 复制到同步到另一台服务器的单个服务器来发布的。该文件复制通常需要几秒钟。
造成这种初始延迟峰值的因素有哪些?是否有任何常用的措施来避免这个问题?(我无法想象每天执行多个构建的高流量站点,即使不是多个构建/小时,也能容忍这种事情。)
随着我们尝试进行更频繁的构建(并且随着我们的网站流量增加),我们注意到在更高的流量期间,初始构建后页面加载会飙升至 20 或 30 秒。我们的构建是通过将 DLL + PDB 复制到同步到另一台服务器的单个服务器来发布的。该文件复制通常需要几秒钟。
造成这种初始延迟峰值的因素有哪些?是否有任何常用的措施来避免这个问题?(我无法想象每天执行多个构建的高流量站点,即使不是多个构建/小时,也能容忍这种事情。)
这种延迟的主要原因是 ASP.Net 在首次加载期间对页面进行编译,将 aspx 标记转换为代码。
您可以通过在构建期间进行预编译来解决此问题(实际上在此链接中被列为第一个优势)。当然,这样做的代价是更长的构建时间。更多信息在这里:http: //msdn.microsoft.com/en-us/library/bb398860 (v=vs.100).aspx
如果您使用 MSBuild 通过使用AspNetCompiler
MSBuild 中的任务来处理 CI 构建:http: //msdn.microsoft.com/en-us/library/ms164291.aspx
这有另一个优点(以及为什么我倾向于在开发构建中使用它),如果您将其集成到构建过程中,并且最终在页面上出现语法错误,构建将失败,而不是您的用户成为第一个抓住它。
回复您的评论(我的回复太长,无法发表评论):
实际上,直到现在我自己都不知道批处理设置。看起来batch
在开发过程中设置为 false 是有意义的,以减少那里的初始加载时间。但是,这样做似乎会使 asp.net 以每页汇编模式运行,这可能会减慢大型应用程序的运行速度。因此,最好的折衷方案可能是在开发环境中,设置batch
为 false 以加快开发时间,然后使用 web.config 转换将其设置回 true 以用于生产,并在生产构建期间使用预编译器。然后,您只需为两台服务器支付一次预编译费用,并且以对用户不可见的方式进行。