我目前正在尝试分析一个性能问题,其中ASP.NET MVC剃刀视图渲染速度非常慢:将响应返回到浏览器需要40秒钟以上。并非总是会发生此问题:通常页面加载时间约为1/2秒。
下图是该页面缓慢加载时由该页面构成的MiniProfiler跟踪的一部分的图像。右边的列是自请求开始以来经过的时间,并且跟踪显示了在呈现剃刀视图期间几秒钟的大幅跳动。我真正不明白的是,为什么其他两列中的时间(“持续时间(ms)”和“有孩子(ms)”)没有反映这些多秒的延迟:我希望在那里能看到很多数字也是
还让我惊讶的是,执行“查找:EditorTemplates / ...”步骤时似乎出现了很大的延迟。请注意,这些模板不存在(请注意:我没有明确尝试渲染这些编辑器模板,但是搜索它们似乎是由页面上的kendo mvc grid引起的)。等待磁盘I / O以确定这些文件不存在是否会导致较大的延迟?如果是这样的话,这怎么可能偶尔只花几秒钟,而且通常很快就会完成?
我应该如何解释这些结果,以及多秒延迟的原因可能是什么?
答案 0 :(得分:0)
您的问题听起来与我们最近的问题相似:每个页面的第一次调用都花了很多时间(页面类似于/Login
,/Templates
,/Files
等)。同一页面上的每个连续调用都更快。问题是,每当调用新页面时,都必须先对其进行编译。已编译的程序集已缓存,因此下一次会更快。
我们使用目标Clean
和Build
构建项目。然后,我们使用MSBuild的以下参数发布它:
/t:WebPublish
/p:Configuration=Release
/p:WebPublishMethod=FileSystem
/p:publishUrl=%build.dirMSBuild%\projectName
/p:PrecompileBeforePublish=true
/p:UseMerge=true
/p:SingleAssemblyName=AppCode
/p:VisualStudioVersion=16.0
/p:DeleteExistingFiles=true
/p:DebugSymbols=false
/p:ExcludeApp_Data=false
这里最重要的标志是PrecompileBeforePublish
,可确保在项目构建过程中构建视图。现在,即使是在第一次调用时,每个页面也几乎可以立即加载。