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