Miniprofiler告诉我,我页面中最慢的部分是“渲染”步骤(下面附带截图)。
渲染步骤中发生了什么?是将.aspx转换为html发送给客户端的阶段吗?是否有任何地方我可以添加Miniprofiler.Current.Step()
以确定它为什么慢?
该应用程序是.NET4.5上的MVC4,带有.aspx渲染引擎。
编辑:
控制器动作只是标准的MVC内容:
public ActionResult Index()
{
ViewData["foo"] = GetFoo();
return View(model);
}
ASPX视图是基本的东西,如:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<p><% ViewData["foo"] %></p>
<% Html.RenderPartial("Something", Model) %>
</asp:Content>
答案 0 :(得分:2)
首先调用ViewResult
方法时会生成View()
对象。
这看起来像
return View( Model );
接下来,在ExecuteResult()
对象中调用ViewResult
方法时,会发生渲染步骤;生成发送到客户端浏览器的 HTML 文档。
ExecuteResult()方法(渲染)过程涉及:
ViewBag
。Partials
最后一部分,渲染 Partials ,就像创建 ViewResult 对象的递归版本一样。执行PartialView()
,RenderPartialView()
或Action()
方法会创建 PartialViewResult 对象。此新结果对象还具有ExecuteResult()
方法,该方法生成HTML“子文档”以与“父” HTML 文档合并。
如果部分视图具有与之关联的子操作(控制器方法),则部分视图渲染需要更长时间,因为它承担了实例化另一个控制器的负担......
您使用2个部分视图;渲染部分视图的时间在37.1毫秒(占总时间的43%)中合并为16.1毫秒。
关于ASPX View Engine的注意事项:
我敢打赌, aspx 引擎渲染视图的时间比 Razor 引擎要长。 aspx 引擎
结论:
与路由引擎重新解析(4.5毫秒)和控制器实例化(7.3毫秒)相比,渲染视图(ExecuteResult()
)可能相当耗时。
在您的情况下,渲染局部视图和父视图的时间似乎很高。但是我没有使用迷你探查器来检查自己。
可能是您的 ASPX 视图引擎 THAT 效率低下,或者您可能有 Child 操作与您的部分重量相关数据库调用......