2013-09-23 49 views
1

随着我们试图增加构建频率(并且随着我们的网站流量的增加),我们注意到,在流量较高时,初始的构建后页面会将峰值加载到20或30秒。我们的版本是通过将DLL的+ PDB复制到同步到另一个服务器的单个服务器来发布的。该文件复制通常需要几秒钟。构建后会导致高延迟页面加载的原因是什么?

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

回答

2

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

通过在构建过程中进行预编译,您可以解决此问题(并且实际上被列为此链接的第一个优势)。当然,这样做的代价是更长的构建时间。更多信息是在这里:http://msdn.microsoft.com/en-us/library/bb398860(v=vs.100).aspx

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

另一个优点这(为什么我倾向于即使在开发中使用此构建),如果你将它集成到你的构建过程中,并且最终在页面上出现语法错误,构建将失败,而不是你的用户成为第一个捕获它的用户。

在回答您的评论(我的反应是越来越的评论太长):

其实,我根本不知道的批次设置自己到现在为止。它看起来像设置batch错误在开发过程中有意义,以减少那里的初始加载时间。但是,似乎这样做会使每个页面模式下的asp.net函数发生作用,从而导致大型应用程序的速度变慢。因此,可能最好的折衷方案是在开发环境中,将batch设置为false以加快开发时间,然后使用web.config转换将其设置为true以进行生产,并在生产构建期间使用预编译器。然后,您只需为两台服务器支付一次预编译成本,并且这种方式对用户不可见。

+0

哦,有趣......不知道有不同的预编译“水平”。 .aspx汇编在“批量编译”设置中提到了什么? ...通过伪造或减少最大批量大小,可以将性能击中“展开”吗? – svidgen

+0

试图通过这里的文档筛选有点混乱。一些文档建议我放弃那里的DLL(编译并发布到VS中的Web应用程序项目的临时目录)是我可以从Web应用程序项目预期的预编译程度。其他文档表明我可以预编译aspx自己,并可以选择“锁定”它们(强制显式重新编译任何标记更改)。要清楚,除了*代码隐藏(预)编译之外,您在此处提及的汇编* – svidgen

+0

如果按照我目前的理解,IIS和/或Aspnet_compiler.exe执行第二级编译,那么Visual Studio的构建/发布操作是否没有优雅自然的内置方法来执行此编译? – svidgen

相关问题