У меня есть настраиваемая страница блога, а в правой части страницы есть «панель», на которой отображаются самые популярные блоги, а другая - с людьми, получившими наибольшее количество голосов в своих блогах на прошлой неделе, и еще три таких вещи.Все эти панели тяжелые;загрузка занимает пару секунд.
Вот приблизительный обзор макета:
макетов, созданных с помощью Balsamiq
Поскольку они не обязаны меняться так часто, я выделил их всех в веб-элементы управления (.ascx), и у них у всех есть выходной кеш:
<%@ OutputCache Duration="7200" VaryByParam="*" VaryByCustom="CacheByModule" %>
И в global.asax
IПолучил это, чтобы соответствовать моей пользовательской переменной кэша:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
switch (custom.ToLower())
{
case "cachebymodule":
Request.Url.PathAndQuery.Split('/')[0];
break;
}
return base.GetVaryByCustomString(context, custom);
}
По сути, я делаю то же самое для разных частей моего сайта, блогов, опросов, опросов, викторины и т. д.
Когда я запускаю свою страницу в первый раз, все они выполняются - что ожидается.При следующем запуске - ни один из них не будет выполнен, что также ожидается.
Теперь, это происходит каждый раз, когда я комментирую или отвечаю на блоге, который является событием обратной отправки, и я использую ajaxОбновление панели для раздела комментариев, все мои правые панели выполняются!
Откуда я знаю это?хорошо, если я отлаживаю приложение, точки останова в них удаляются для ответа и удаления (события обратной передачи).SQL Profiler показывает столько же, что в два раза больше подтверждений.
Это ожидаемое поведение?Весь смысл их кеширования в том, что они никогда не выполняются ... и тем не менее, при каждом ответе и удалении они выполняются.Только время, когда они не выполняются, находится при загрузке новой страницы (и в пределах ограничения по времени кэша)
Итак, почему это выполняется на обратных передачах?и как мне этого избежать, пожалуйста?
Спасибо