Asp.net MVC 2 кеширование
В настоящее время я разрабатываю веб-сайт, используя asp.net MVC 2 в C#. Я никогда не использовал функцию кэширования в MVC и хотел бы применить ее на странице профиля пользователя. Содержание этой страницы редко изменяется, и единственная часть, которая должна быть в реальном времени, - это список последних сообщений пользователя. (Я использую linq-to-sql для загрузки данных из базы данных)
Мне нужно несколько советов о том, какую технику кэширования я должен использовать и как ее реализовать?
Обновление: решение Xandy ниже почти работает, за исключением того, что я не могу передать данные. Как бы я переписать это с помощью? Html.RenderPartial("UserPosts", ViewData["UserPosts"])
3 ответа
Как уже отмечалось в других ответах, "MVC" работает с кэшированием пончиков.
Я не рекомендовал бы это - вместо этого я предложу альтернативу:
У вас есть представление для профиля пользователя, назовем его " UserProfile.aspx ".
Теперь в этом представлении у вас есть куча HTML, включая раздел для "последних сообщений".
Теперь я предполагаю, что это что-то вроде последних 10 сообщений для пользователя.
То, что я хотел бы сделать, это поместить этот HTML/ раздел в частичное представление и обработать его с помощью отдельного метода действия, известного как Partial ViewResult:
public class UserProfileController
{
[HttpGet]
[OutputCache (Duration=60)]
public ActionResult Index() // core user details
{
var userProfileModel = somewhere.GetSomething();
return View(userProfileModel);
}
[HttpGet]
public PartialViewResult DisplayRecentPosts(User user)
{
var recentPosts = somewhere.GetRecentPosts(user);
return PartialViewResult(recentPosts);
}
}
Визуализируйте частичное представление, используя jQuery:
<script type="text/javascript">
$(function() {
$.get(
"/User/DisplayRecentPosts",
user, // get from the Model binding
function (data) { $("#target").html(data) } // target div for partial
);
});
</script>
Таким образом, вы можете максимально использовать OutputCache для основных деталей (Index()), но последние записи не кэшируются. (или вы можете иметь очень маленький период кэширования).
Метод рендеринга частичного в jQuery отличается от RenderPartial, так как вы обслуживаете HTML- код непосредственно из контроллера, поэтому вы можете соответствующим образом контролировать выходное кэширование.
Конечный результат очень похож на кэширование пончиков (некоторые части страницы кэшируются, другие нет).
Трюки Фила Хака с кэшированием фрагментов больше не работают в MVC2.
В Stackru мы создаем фрагменты HTML в виде текста и кешируем их, используя HttpRuntime.Cache и другие.
ASP.Net имеет учебник по кэшированию вывода для MVC.
Частичное (он же Donut) кэширование, которое будет работать для MVC2.