遅いネストされたレンダーパルティアル応答時間
-
02-10-2019 - |
質問
ネストされたhtml.renderpartialsの構築されたASP.NETビュー/ページ(動的)があります。ビューは、適切なビューモデルをレンダリングするために送信されます。
FireBugは、HTMLのGET応答は9.89秒で9.89秒であると言います。同じサイトのFAQページ(静的HTML)を比較することは、17Kで1.3秒です。
最初は、ViewModelの複雑さのためにSQLエンティティのバックエンドが物事を遅くしていると思っていましたが、ログに応じて1秒未満でViewModelを構築しているようです。
MVCビューがレンダリングに非常に時間がかかる理由と、これをどのようにスピードアップできるのかという考えはありますか? Ajaxを介した部分的な読み込みを検討しています。
(ところで、私はgzipとcdnなどを使用します - 私はサイト全体を殺害しました)
編集:
ONACTIONEXECUTING/ONACTIONEXECTEDおよびONRESULTEXECUTING/ONRESULTEXECTEDにタイマー(STOPWATCH)を追加しました。
09/12/2010 18:39:20:コントローラー:プロファイルアクション:インデックスエラー時間:680.6431-アクション
09/12/2010 18:39:29:コントローラー:プロファイルアクション:インデックスエラー時間:9202.063-結果
フレームワークがビューをレンダリングする9秒。
解決
問題が解決しました
まず、あなたの提案を皆さんに感謝します。問題が発見されるまで、それぞれの提案に何度も従いました。これは間違っていたものであり、誰かが他の人のために明確にすることができるかもしれません。
VS2010パフォーマンスウィザードは、各オブジェクトがpartialViewsに渡されていると言っていました。
foreach (ProfileComment item in Model)
{
Html.RenderPartial("UserActivityComment", item);
}
...
Friends friend = Model.Friends.Where(e => e.ID == activity.ActionID).FirstOrDefault();
if (friend.FriendsProfile.UserName != Page.User.Identity.Name)
{
Html.RenderPartial("UserActivityFriend.ascx", friend);
}
ProfileCommentとFriendsオブジェクト(Plusその他)は、私が生成してページに渡すViewModelの一部です。これで、VMはエンティティフレームワークを介して0.3秒未満で生成されるため、すべてがVMで問題ないと思いました。
私がそれを処理するためにビューを望んでいたとき、大きな遅れが起こりました。 「for loop」のモデルにはフラグが付けられていたため、PerformaceウィザードによるFirstordefaultも同様でした。
うーん、モデルは迅速に構築されますが、迅速に処理されません。 解決:
_entities.Friends.MergeOption = MergeOption.NoTracking;
_entities.ProfileComment.MergeOption = MergeOption.NoTracking;
この問題は、VMからオブジェクトを抽出して、関係のためにエンティティ管理を維持したいと考えているため、部分的なものに送信することだったと思います。
で詳細 AIA研究
およびblogs.microsoft.co.il/blogs/gilf/archive/2009/02/20/disabling-change-tracking-in-entity-framework.aspx
これを詳細に拡張してください。ところで、パフォーマンスの増加はそうでした 巨大!