5

Miniprofiler は、ページの最も遅い部分が「レンダリング」ステップであることを示しています (下にスクリーンショットを添付)。

そのレンダーステップで何が起こっていますか? .aspx を html に変換してクライアントに送信する段階ですか? Miniprofiler.Current.Step()遅い理由を正確に確認するために追加できる場所はありますか?

アプリは、.aspx レンダリング エンジンを使用した .NET4.5 上の MVC4 です。

ここに画像の説明を入力

編集:

コントローラーのアクションは、次の行に沿った標準の 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 * 属性をレンダリングする
  • ビューへのモデル バインディング;; 各ヘルパーおよびモデル参照は、モデルおよび/または からの値に置き換えられますViewBag
  • ビューを任意のレイアウトとマージする
  • あなたのレンダリングPartials

この最後のパート Rendering your Partialsは、 ViewResultオブジェクトの作成の再帰バージョンのようなものです。、PartialView()RenderPartialView()またはAction()Method が実行され、PartialViewResultオブジェクトが作成されます。この新しい結果オブジェクトにはExecuteResult()、HTML の「サブドキュメント」を生成して「親」のHTMLドキュメントとマージするメソッドもあります。

部分ビューに子アクション(コントローラー メソッド) が関連付けられている場合、別のコントローラーをインスタンス化する負担がかかるため、部分ビューのレンダリングにさらに時間がかかります...

2 つの部分ビューを使用します。部分ビューをレンダリングする時間は、37.1 ミリ秒のうち 16.1 ミリ秒 (合計時間の 43%) になります。

ASPX ビュー エンジンに関する注意:

aspxエンジンは、 Razorエンジンよりもビューのレンダリングに時間がかかるに違いありません。aspxエンジン_

  • より多くのコンテンツがあります (その多くは時代遅れの Web フォームの名残りです)
  • MVC 3 の開発が開始されてから (2010 年後半)、ASPX エンジンが進化したとは思えないため、おそらく効率が低下しています。

結論は:

ビューのレンダリング ( ) は、ルート エンジンの解像度 (4.5 ミリ秒) やコントローラーのインスタンス化 (7.3 ミリ秒) とExecuteResult()比較して、かなり時間がかかる可能性があります。

あなたの場合、部分ビューと親ビューをレンダリングする時間が長いようです。しかし、ミニプロファイラーを使用して自分自身をチェックしたことはありません。

ASPXビュー エンジンが非効率的であるか、大量のデータベース呼び出しを行っているパーシャルにアクションが関連付けられている可能性があります...

于 2013-10-21T23:41:43.187 に答える