5

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>
4

1 回答 1

2

首先,当您调用方法ViewResult时会生成一个对象。View()

这看起来像

return View( Model );

接下来的渲染步骤发生在对象ExecuteResult()中调用该方法时ViewResult;生成发送到客户端浏览器的HTML文档。

ExecuteResult() 方法(渲染)过程涉及:

  • 渲染HTML元素和JQuery /* Javascript * 属性代替你的助手
  • 模型绑定到您的视图;;每个 Helper 和 Model 引用都替换为来自您的 Model 和/或ViewBag.
  • 将您的视图与任何布局合并
  • 渲染你的Partials

最后一部分,渲染您的Partials,就像创建ViewResult对象的递归版本。执行A PartialView()RenderPartialView()Action()Method 以创建PartialViewResult对象。这个新的结果对象也有一个ExecuteResult()生成 HTML“子文档”以与“父” HTML文档合并的方法。

如果 Partial View 有一个与之关联的子Action (控制器方法),则Partial View 渲染需要更长的时间,因为它承担着实例化另一个控制器的负担......

您使用 2 个局部视图;渲染部分视图的时间总计为 37.1 毫秒中的 16.1 毫秒(占总时间的 43%)。

关于 ASPX 视图引擎的注意事项:

我敢打赌,aspx引擎比Razor引擎需要更长的时间来渲染视图。aspx引擎_

  • 有更多内容(其中大部分是过时的网络表单残余)
  • 我不相信自 MVC 3 开发开始(2010 年末)以来 ASPX 引擎已经发展,因此它的效率可能较低。

综上所述:

与路由引擎解析(4.5 毫秒)和控制器实例化(7.3 毫秒)相比,渲染视图 ( ExecuteResult()) 可能相当耗时。

在您的情况下,渲染局部视图和父视图的时间似乎很长。但我没有使用迷你分析器来检查自己。

可能是您的ASPX视图引擎效率低下,或者您可能有与您的部分相关联的操作正在进行繁重的数据库调用......

于 2013-10-21T23:41:43.187 回答