禁用Sitecore';为一个项目创建Html缓存

禁用Sitecore';为一个项目创建Html缓存,sitecore,sitecore6,Sitecore,Sitecore6,我想为1个项目禁用html缓存,以便始终呈现它 背景: 我需要显示存储在单独数据库中的公司信息。在sitecore中,我有一个项目,它具有显示所需信息的用户控件,并根据上下文参数确定要显示的公司 sitecore树如下所示: /sitecore /content /home /company-information url是:/show company information/[company name]-[company id]。我有一个管道模块,它解析url并将公司

我想为1个项目禁用html缓存,以便始终呈现它

背景:

我需要显示存储在单独数据库中的公司信息。在sitecore中,我有一个项目,它具有显示所需信息的用户控件,并根据上下文参数确定要显示的公司

sitecore树如下所示:

/sitecore
  /content
    /home
      /company-information
url是:
/show company information/[company name]-[company id]
。我有一个管道模块,它解析url并将公司信息设置为当前项,并将公司id添加到
HttpContext.current.Items
。这就是我的用户控件确定要呈现哪些公司信息的方式

这一切在开发中都可以正常工作,但一旦您将其部署到内容交付服务器,它就会停止正常工作。第一次访问页面时,它会被缓存,并且每个连续的请求都会返回第一次缓存的公司信息

我目前的解决方法是在解析公司信息的同一管道步骤中清除
公司信息
项的HTML缓存,但这似乎是一个非常糟糕的解决方案

有没有更好的方法达到同样的效果


编辑

以下是如何在web.config中设置网站以及web数据库配置:

<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>

我们是否做了什么错事让它被如此积极地缓存

如果正在缓存HTML,则它将来自特定的呈现,例如特定的子布局。如果将子布局设置为缓存并因布局详细信息中的任何内容而变化,请撤消该设置。或者,您可能是在代码中完成的,在这种情况下,您可以将C#更改为不缓存它

下面是设置为缓存的代码中的子布局,您可能希望不缓存这样的内容:

<sc:Sublayout Path="~/layouts/sublayouts/mycontrol.ascx" Cacheable="true" runat="server" />

如果正在缓存HTML,则它将从特定的呈现(例如,特定的子布局)中删除。如果将子布局设置为缓存并因布局详细信息中的任何内容而变化,请撤消该设置。或者,您可能是在代码中完成的,在这种情况下,您可以将C#更改为不缓存它

下面是设置为缓存的代码中的子布局,您可能希望不缓存这样的内容:

<sc:Sublayout Path="~/layouts/sublayouts/mycontrol.ascx" Cacheable="true" runat="server" />

如果仅通过发布任何sitecore项目就解决了此缓存问题,则可以安全地假定其为sitecore HTML缓存

启用缓存的任何布局或子布局也将缓存其中添加的任何控件的输出。因此,如果此控件或渲染的任何父子布局启用了缓存,则需要禁用它

查看页面缓存设置的简单方法是通过调试器[Start]>[Debug]
将鼠标悬停在控件上将允许您查看其结果缓存设置

如果仅通过发布任何sitecore项目就解决了此缓存问题,则可以安全地假定其为sitecore HTML缓存

启用缓存的任何布局或子布局也将缓存其中添加的任何控件的输出。因此,如果此控件或渲染的任何父子布局启用了缓存,则需要禁用它

查看页面缓存设置的简单方法是通过调试器[Start]>[Debug]
将鼠标悬停在控件上将允许您查看其结果缓存设置

您可以使用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;
}

这很残酷,但它可以工作。

您可以使用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;
}

这很残酷,但可以正常工作。

如果项目是子布局,则可以在页面编辑器组件属性中或通过缓存部分中的子布局项目定义禁用其渲染缓存


例如,我有一个禁用缓存的搜索结果子布局。

如果您的项是子布局,则可以在页面编辑器组件属性中或通过缓存部分中的子布局项定义禁用其呈现缓存


例如,我有一个禁用缓存的搜索结果子布局。

Mark。似乎sitecore缓存了整个页面的html。我检查了控件,并且在子布局中将Cacheable设置为false。HTML是缓存的,但它是逐块缓存的。缓存整个页面通常不是一个好主意。您可以看一看,以便更深入地了解正在缓存的特定组件。stats页面将把它分解为每个组件。另外,如果
DisableBrowserCaching
设置设置为
false
,我想在web.config中添加它,整个页面将被缓存。您可能需要查看该设置。标记。似乎sitecore缓存了整个页面的html。我检查了控件,并且在子布局中将Cacheable设置为false。HTML是缓存的,但它是逐块缓存的。缓存整个页面通常不是一个好主意。您可以看一看,以便更深入地了解正在缓存的特定组件。stats页面将把它分解为每个组件。另外,如果
DisableBrowserCaching
设置设置为
false
,我想在web.config中添加它,整个页面将被缓存。您可能需要查看该设置。缓存的具体内容是什么?您能否提供子布局结构的概述,以及哪些层启用了缓存,使用哪些“不同”选项?@techphoria414。我已经添加了当前配置和各种选项。缓存的是什么?您能否提供子布局结构的概述,以及哪些层启用了缓存,使用哪些“不同”选项?@techphoria414。I h