【问题标题】:What is the cost associated with html.action calls within html.partial calls in MVC3?与 MVC3 中 html.partial 调用中的 html.action 调用相关的成本是多少?
【发布时间】:2013-08-31 03:23:40
【问题描述】:

所以我正在使用 MVC3 创建一个网页,该网页应该是高度可定制的。例如,以电视节目的 IMDB 页面为例。它有多个组件(以下称为小部件):标题信息、演员表、剧集列表、随机琐事、报价列表、论坛预览等。

假设我正在创建一个 IMDB 克隆,并且根据页面类型(电影、电视节目、演员),您会显示不同的小部件。并且用户还可以更改首选项以在每种类型的页面中添加或删除某些小部件。

在我的设计中,我有它,以便主视图的控制器传递“小部件视图模型”的集合,其中包含获取每个小部件所需信息所需的信息。因此它将提供 ID(从数据库中获取信息)、控制器和操作。

在主视图中,它遍历这个小部件视图模型列表,并为通用小部件容器分部视图调用 html.partial,该部分视图包含每个小部件的通用 HTML 和 JavaScript/jQuery,并将单个小部件视图模型传递给那个局部视图。

在该局部视图中,在通用小部件容器的内容 div 中,它调用另一个 html.action 来获取特定的小部件局部视图,方法是调用特定控制器操作,该操作通过 id 字段获取信息小部件视图模型。

悬崖笔记:元数据对象列表 -> 主视图。每个元数据对象 -> 通用局部视图。局部视图 -> 另一个使用元数据获取数据的局部视图。

既然你已经阅读了所有这些,我有两个问题:

  1. 在一个主视图中调用多个 html.partial,每个部分视图调用一个 html.action,相关成本是多少?

  2. 这是一个好的、合乎逻辑的设计吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    有趣的问题 - 我做了几个实验,因为我想自己知道答案。

    1) 成本是控制器对象的创建。每次调用 Html.Action() 时,都会创建一个新的控制器对象实例。即使您在同一个视图的过程中在同一个控制器上调用多个操作也是如此(我试过这个)。这是一种很好的行为,因为它可以确保每个动作都有一个干净的状态。

    @Html.Partial 根本不应该成为负担 - 编译器应该优化。

    不利的一面是,如果您的控制器正在使用外部服务(如数据库)进行繁重的工作,您最终可能会在处理单个请求时一次打开相当多的连接(至少一个用于您的父页面,一个用于对于视图,因为控制器在视图呈现之前不会被处理 - 对于您的子视图,这应该在 Html.Action 的末尾)。因此,您需要注意这一点 - 如果您的操作会产生昂贵的资源,这可能会累加。

    2) 作为一种设计,尽管有上述情况,但对我来说似乎并没有那么糟糕。您可以很好地分离关注点,您的单个代码都不会变得过于复杂,并且您通常总是知道您的代码在哪里。

    您必须做出的决定是性能优化还是开发优化,这取决于控制器操作的权重。

    【讨论】:

    • 感谢您的信息。我不确定是否每次都会实例化一个新的控制器对象。但是,是的,似乎确实可以轻松地进行开发/性能权衡。我现在只需要记住这一点。
    猜你喜欢
    • 2011-07-12
    • 2012-01-19
    • 2010-11-15
    • 2010-09-10
    • 2021-02-14
    • 2012-07-30
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多