Кэширование частичных представлений в asp.net MVC - PullRequest
5 голосов
/ 04 июня 2009

У меня следующая ситуация в веб-приложении:

Таблица «Сотрудники» содержит столбцы « Отдел » и « Функция ». Оба являются выпадающими списками.

Параметры раскрывающегося списка «Функция» зависят от выбранного «отдела». (поэтому каждый отдел имеет свой список функций)

При смене отдела я выполняю ajax-вызов действия контроллера с параметром "DepartmentId". Theres атрибут [outputcache] в controlleraction, поэтому возвращаемые им функции кэшируются для каждого идентификатора отдела.

Моя проблема заключается в начальной загрузке страницы. Можете ли вы вызвать controlleraction в представлении и воспользоваться преимуществами кэширования?

Кто-нибудь? 30 просмотров и нет ответов .. Есть замечания по моему вопросу? Слишком очевидно? слишком сложно? слишком странно? что-то для Google (хотя я не нашел там решения)?

Ответы [ 3 ]

4 голосов
/ 06 июня 2009

Фил Хаак написал короткое сообщение в блоге на похожую тему под названием Кеширование пончиковых дыр . Это послужит хорошей отправной точкой.

4 голосов
/ 29 июля 2009

Я бы использовал субконтроллеры или, что еще лучше, частичные запросы, чтобы выполнить то, что вы просите. На типичной странице я склонен не кэшировать всю страницу, а разбивать области на различные методы действий, которые вызываются посредством частичных запросов. Таким образом, у меня может быть выходное кэширование в каждой области с разным сроком действия. Это больше жизненных циклов страниц, но когда они кэшируются, они действительно не являются налогом на производительность. Также намного легче поддерживать и оптимизировать определенную область, если она начинает работать хуже.

По моему опыту, это также очень хорошо согласуется с шаблонами ajax, поскольку вы только каждый "получаете" свои данные одним методом действия.

Частичные запросы обсуждаются здесь и субконтроллеры здесь

Надеюсь, это поможет.

0 голосов
/ 06 июня 2009

Вы имеете в виду, что вы хотите вызвать действие контроллера, которое генерирует функции непосредственно при генерации представления, а не с помощью ajax? Если я правильно понял, я не думаю, что можно получить данные в кеше вывода (хотя я могу ошибаться). В любом случае, если бы вы могли получить его, вам все равно пришлось бы снова декодировать данные.

Вы также можете попробовать

  • Кэширование отдела идентифицирует себя в HttpContext.Cache и использует их в обоих действиях (возможно, это так быстро, что вам больше не нужен OutputCache и нет двойного кеширования)
  • Или, если количество отделов / функций не так велико, вы можете создать структуру json со всеми функциями, сохранить их в представлении и вообще не использовать ajax.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...