У меня есть страница, которая имеет набор виджетов на нем. Каждый виджет является представлением. Прямо сейчас рендеринг виджета сделан в цикле 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. Действию () для получения строкового значения для каждого действия параллельно, но MVC, кажется, не нравится представлять представления параллельно. Я всегда получаю "Объект не набор к экземпляру объектной" ошибки, когда я пытаюсь сделать это. Ошибка прибывает из глубоко в стеке MVC, таким образом, я думаю, что это - просто ошибка MVC.
У кого-либо есть лучшая идея для увеличения скорости рендеринга страницы?
Пол,
Существует класс 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, либо напрямую, учитывая, что он асинхронный.
Джим
Можно ли использовать области и «заполнять» их с помощью ajax?