Как я могу представить Действия MVC параллельно для уменьшения в целом представляющего времени страницы?

У меня есть страница, которая имеет набор виджетов на нем. Каждый виджет является представлением. Прямо сейчас рендеринг виджета сделан в цикле 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.

У кого-либо есть лучшая идея для увеличения скорости рендеринга страницы?

1
задан Paul Mendoza 5 August 2010 в 16:17
поделиться

2 ответа

Пол,

Существует класс 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, либо напрямую, учитывая, что он асинхронный.

Джим

0
ответ дан 2 September 2019 в 22:24
поделиться

Можно ли использовать области и «заполнять» их с помощью ajax?

2
ответ дан 2 September 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: