如何并行渲染MVC操作以减少页面的整体渲染时间?

时间:2010-08-05 16:17:37

标签: asp.net-mvc model-view-controller parallel-processing

我有一个页面上有一堆小部件。每个小部件都是一个视图。现在,小部件渲染是在foreach循环中完成的。

public class WidgetCollection : List<Widget>, IPersonalizable
{
    public void Render(HtmlHelper html)
    {            
        foreach (Widget w in this)
        {

            html.RenderAction("Default", "Widget", new { model = w });
        }
    }

但这意味着我的一些小部件在800毫秒内呈现,因为它们是IO绑定的,它们阻止了一堆其他小部件,而不是仅需要100毫秒来呈现。总的来说,渲染页面所需的时间大约是3秒。我希望页面在800毫秒内渲染或尽可能接近。

我的一个想法是调用html.Action()来并行获取每个动作的字符串值,但MVC似乎并不喜欢并行渲染视图。当我尝试这样做时,我总是得到一个“对象未设置为对象的实例”错误。错误来自MVC堆栈的深层,所以我认为它只是一个MVC错误。

有没有人有更好的想法来提高页面渲染速度?

2 个答案:

答案 0 :(得分:2)

您可以使用区域并通过ajax“填充”它们吗?

答案 1 :(得分:0)

保罗,

您的基本控制器可以继承一个AsyncController类。这可能是你最好的选择。

public abstract class BaseController : AsyncController

此链接可能会进一步阐明:http://msdn.microsoft.com/en-us/library/ee728598.aspx

或者这个:http://bartwullems.blogspot.com/2010/01/using-asynccontroller-in-aspnet-mvc-2.html

然后,您可以使用ajax或直接使用它,因为它是异步的。

吉姆