我有一个页面上有一堆小部件。每个小部件都是一个视图。现在,小部件渲染是在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错误。
有没有人有更好的想法来提高页面渲染速度?
答案 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或直接使用它,因为它是异步的。
吉姆