Отключить HTML-кэш Sitecore для одного элемента - PullRequest
0 голосов
/ 07 июня 2011

Я хочу отключить HTML-кэш для 1 элемента, чтобы он всегда отображался.

Справочная информация:

Мне нужно показать информацию о компаниях, хранящуюся в отдельной базе данных.В sitecore у меня есть 1 элемент, который имеет пользовательский элемент управления, который показывает необходимую информацию и в зависимости от параметра Context я выясняю, какую компанию показывать.

Дерево sitecore выглядит следующим образом:

/sitecore
  /content
    /home
      /company-information

URL-адрес: /show-company-information/[company-name]-[company-id].У меня есть модуль конвейера, который анализирует URL-адрес и устанавливает информацию о компании в качестве текущего элемента и добавляет идентификатор компании к HttpContext.Current.Items.Вот как мой пользовательский элемент управления определяет, какую информацию о компании следует отображать.

Все это прекрасно работает в процессе разработки, но после развертывания на сервере доставки контента оно перестает работать правильно.При первом обращении к странице она кэшируется, и каждый последующий запрос возвращает информацию о компании, которая была кэширована в первый раз.

Мой текущий обходной путь - очистить кэш HTML для элемента company-info на том же этапе конвейера, который анализирует информацию о компании, но это кажется действительно грязным решением.

Есть ли лучший способ добиться того же результата?


РЕДАКТИРОВАТЬ

Вот как настраивается сайт в файле web.config, а также конфигурация веб-базы данных.:

<site name="website" virtualFolder="/" physicalFolder="/" rootPath="/sitecore/content/Home/" startItem="/home" language="en-GB" database="web" domain="extranet" loginPage="/user-login.aspx" allowDebug="true" cacheHtml="true" htmlCacheSize="400MB" registryCacheSize="500KB" viewStateCacheSize="500KB" xslCacheSize="20MB" filteredItemsCacheSize="20MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" disableClientData="false" />

<!-- CACHE SIZES -->
    <cacheSizes>
      <sites>
        <website>
          <html>500MB</html>
          <registry>500KB</registry>
          <viewState>500KB</viewState>
          <xsl>200MB</xsl>
        </website>
      </sites>
    </cacheSizes>

<database id="web" singleInstance="true" type="Sitecore.Data.Database, Sitecore.Kernel">
    <param desc="name">$(id)</param>
    <icon>Network/16x16/earth.png</icon>
    <securityEnabled>true</securityEnabled>
    <dataProviders hint="list:AddDataProvider">
      <dataProvider ref="dataProviders/main" param1="$(id)">
        <disableGroup>publishing</disableGroup>
        <prefetch hint="raw:AddPrefetch">
          <sc.include file="/App_Config/Prefetch/Common.config" />
          <sc.include file="/App_Config/Prefetch/Web.config" />
        </prefetch>
      </dataProvider>
    </dataProviders>
    <indexes hint="list:AddIndex">
      <index path="indexes/index[@id='articleIndex']" />
    </indexes>
    <proxiesEnabled>false</proxiesEnabled>
    <proxyDataProvider ref="proxyDataProviders/main" param1="$(id)" />
    <archives hint="raw:AddArchive">
      <archive name="archive" />
      <archive name="recyclebin" />
    </archives>
    <Engines.HistoryEngine.Storage>
      <obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel">
        <param connectionStringName="$(id)" />
        <EntryLifeTime>30.00:00:00</EntryLifeTime>
      </obj>
    </Engines.HistoryEngine.Storage>
    <cacheSizes hint="setting">
      <data>400MB</data>
      <items>400MB</items>
      <paths>10MB</paths>
      <standardValues>1MB</standardValues>
    </cacheSizes>
  </database>
</databases>

Структура макетов страниц:

layout - no output caching
  - sublayout - no caching options ticked
    - offending sublayout - no caching options ticked

Мы делаем что-то не так, чтобы кэширование было таким агрессивным?

Ответы [ 4 ]

2 голосов
/ 22 июня 2011

Вы можете использовать CacheManager, чтобы отключить кэширование во время события загрузки страницы, а затем снова включить его в PreRender. Это гарантирует, что элементы управления html / xslt страницы не будут кэшированы.

Класс CacheManager имеет следующий метод, используемый всеми элементами управления при получении кэшей HTML

/// <summary>
/// Gets the HTML cache.
/// </summary>
/// <param name="site">The site.</param>
/// <returns>The HTML cache.</returns>
public static HtmlCache GetHtmlCache(SiteContext site)
{
  if (_enabled && (site != null))
  {
    return site.Caches.HtmlCache;
  }
  return null;
}

Таким образом, установка для свойства Enabled значения false остановит отображение элементов управления из кэша:

CacheManager.Enabled = false;

Это жестоко, но это работает.

1 голос
/ 07 июня 2011

Если ваш HTML кешируется, то это от определенного рендеринга, например конкретный подслой. Если у вас есть подслой, настроенный на кеширование и изменяющийся в деталях макета, отмените это. Или вы можете делать это в коде, и в этом случае вы можете изменить свой C #, чтобы он не кэшировался.

Вот подслой в коде, который настроен на кеширование, у вас может быть что-то подобное, что вы не хотите кешировать:

<sc:Sublayout Path="~/layouts/sublayouts/mycontrol.ascx" Cacheable="true" runat="server" />
0 голосов
/ 11 февраля 2014

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

Например, у меня есть подслой результатов поиска.с отключенным кешем.

0 голосов
/ 07 июня 2011

Если эту проблему с кешем устранить, просто опубликовав какой-либо элемент sitecore, то можно с уверенностью предположить, что он является HTML-кешем sitecore.

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

Простой способ просмотра настроек кэша для вашей страницы - через отладчик [Пуск]> [Отладка]. Наведя курсор на элементы управления, вы сможете просмотреть их результирующие настройки кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...