每页使用多个@ Html.Action()是否很昂贵?

时间:2013-10-16 11:35:16

标签: c# asp.net-mvc razor umbraco

我将Umbraco与Razor一起用作CMS。这种方法的局限性在于我的页面模板绑定到Umbraco特定的对象,该对象没有我需要的所有属性。到目前为止,为了解决这个问题,我已经多次调用@Html.Action()来显示由我的控制器构建的部分视图。

这是实现我想要的一种昂贵的方式,还有其他方法可以解决绑定到您无法控制的视图模型的限制吗?

1 个答案:

答案 0 :(得分:1)

当然,这个问题的答案是“它取决于”。

每个@Html.Action()都会对Controller上的操作提出独立请求。显然,对@Html.Action()的任何调用都会产生更多的开销,而根本没有。

除此之外,在Umbraco中假设您正在调用SurfaceController类上的操作,还有一个额外的层,Umbraco引入了实例化控制器的上下文并将操作连接起来。

但是,所有使用@Html.Action()说明的内容都允许您拆分视图模型并提供独立于页面模型的功能。这是回报,我认为这已经足够了。这里重要的是确保您使用这种技术足以使代码库易于管理,同时仍然可以提高请求效率。例如,不要使用它显示可以通过页面模型直接访问的内容。为此你可以使用部分。

您应该始终查看您的ChildAction代码,以确保尽可能使用缓存并适当减少每次调用的处理量。例如,我总是使用ChildAction来生成我的主导航,但由于导航永远不会改变,我会缓存返回的模型,因此对动作的调用尽可能快。

最后,如果您的控制器具有像EF数据库上下文等依赖关系,请使用像Autofac这样的IoC容器来确保每个实例一次假脱机依赖关系然后共享。这可以确保控制器(以及操作)使用的任何资源都是重复的。