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

本文关键字:是否 Action @Html | 更新日期: 2023-09-27 18:35:31

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

这是实现我想要的东西的昂贵方法吗?是否有其他方法可以绕过绑定到您无法控制的视图模型的限制?

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

当然,这个问题的答案是"视情况而定"。

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

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

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

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

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