【问题标题】:2 or 1 request to server: In Asp.net Mvc Does using "- @Html.Action("")-" in view makes 2 requests to server对服务器的 2 或 1 个请求:在 Asp.net Mvc 中是否使用“-@Html.Action("")-" 向服务器发出 2 个请求
【发布时间】:2011-12-08 18:41:03
【问题描述】:
假设:我有 2 个动作(动作名称 = A,B)和 2 个视图,每个动作一个视图。
View for Action "A" 如下所示
@*codes*@
@Html.Action("B")
@*calling action 'B' to render its content from view of action'A'*@
@*more codes*@
现在我的问题是从操作“A”的角度询问操作“B”的内容是否从用户(请求操作 A 的内容)向网络服务器发出 2 个请求,并由服务器向其自身(或其他东西)发出内部请求像那样)。或者可能是我需要确保在从视图中调用操作时考虑性能的事情。
【问题讨论】:
标签:
c#
asp.net
asp.net-mvc
asp.net-mvc-3
asp.net-mvc-2
【解决方案1】:
是的,控制器被初始化并且被称为位的动作在相同的上下文中被执行。但是没有隐含所有网络开销的第二个 http 请求。
以这种方式执行事情肯定会存在一些性能缺陷,但它确实会进行一些分析以查看造成了多少损害。
【解决方案2】:
任何时候您通过Html.Action() 或Html.RenderAction() 从视图呈现操作时,您正在创建一个全新的请求到服务器 到MVC,这反过来调用(大部分)默认请求管道。虽然这不是一个额外的网络请求,但它仍然有些昂贵。
与标准请求相比,MVC 团队已考虑减少“子操作请求”的开销,但它仍然是 MVC 管道的 2 次单独执行。
是的,RenderAction(较慢)与 RenderPartial(较快)的性能存在显着差异。根据定义,RenderAction 必须运行整个 ASP.NET 管道来处理在系统看来是新的 HTTP 请求,而 RenderPartial 只是向现有视图添加额外内容。
-Brad Wilson,ASP.NET MVC 团队的高级开发人员
(source)