【问题标题】:How do you adjust the cache duration of a statically bound rendering in Sitecore?您如何调整 Sitecore 中静态绑定渲染的缓存持续时间?
【发布时间】:2016-03-28 16:13:07
【问题描述】:

在 Sitecore 中,我的 Razor 中有一个静态绑定的渲染器:

@Html.Sitecore().Rendering("[item ID]")

这很好用,但我想缓存。所以:

@Html.Sitecore().Rendering("[item ID]", new { Cacheable = true } )

这也有效,并且似乎缓存了大约 60 秒,据我所知,这是默认设置。

我想缓存 20 分钟(1200 秒),但我找不到任何方法来指定它。 Rendering 的第二个参数是一个匿名对象,因此 Intellisense 对此没有帮助。我试过了:

new { Cacheable = true, Duration = 1200 }
new { Cacheable = true, Cache_Duration = 1200 } // Someone said Cache_ was the trick. It wasn't.

改变这些渲染的缓存持续时间的设置是什么?

更新

我反思了一下,但无济于事。该匿名对象的属性被迭代并用于设置Rendering.RenderingProperties 的值。这是一个键/值数据结构,以字符串为键,因此任何缓存设置都不再是强类型的,因此我的反射轨迹很冷。

另一个更新

@sitecore-climber 做了更多的反思,发现RenderingCachingDefiniton 的一个名为Timeout 的属性似乎将Cache_Timeout 键的值解析为Timespan 对象。

但是,我对此的实际测试...

new { Cacheable = true, Cache_Timeout = "00:20:00"}

...似乎没有更改 60 秒缓存超时。这很奇怪,因为您可以在 RenderingCachingDefinition 类中看到解析该匿名对象参数的所有其他属性(CacheableVaryByParam 等)。

当然,这可能解析得很好,Sitecore 只是不对结果值做任何事情。但我遵循了 Timeout 属性,根据我的阅读,它准确地用于设置缓存超时。

【问题讨论】:

  • 我不认为它开箱即用。你能检查一下这个解决方案吗? reinoudvandalen.nl/blog/…
  • 你可以试试 Cache_Timeout 吗?我反编译了代码,TimeOut 属性看起来像: TimeSpan 结果; if (TimeSpan.TryParse(this.Rendering["Cache_Timeout"], out result)) 返回结果;
  • 是的,我找到了相同的代码。我已经尝试过了,它似乎不起作用。我把00:20:00 放在那里,它应该可以准确地解析到 20 分钟。我的测试程序:我的 Razor 模板中有一行 @DateTime.Now.ToLongTimeString()。我可以一遍又一遍地点击刷新,它仍然大约每 60 秒改变一次。
  • 我想知道它是否必须在管道中完成? reinoudvandalen.nl/blog/…
  • 我也试过了,但我不确定静态绑定的项目是否会进入管道。这听起来很奇怪,我知道,但在管道中用断点卡住了一步,然后看着一切顺利进行。据我所知,我的四个静态绑定渲染器从未通过。

标签: sitecore


【解决方案1】:

我尝试了 Sitecore 8.1 解决方案,使用效果很好

@Html.Sitecore().Rendering("{240A3624-8600-4A7B-8C07-5846A673F1F0}", new { Cacheable = true,Cache_Timeout = "00:20:00" } )

在我的视图容器上我有:

 @Html.Sitecore().Rendering("{240A3624-8600-4A7B-8C07-5846A673F1F0}")

 @Html.Sitecore().Rendering("{240A3624-8600-4A7B-8C07-5846A673F1F0}", new { Cacheable = true,Cache_Timeout = "00:20:00" } )

我的观点很简单

@using Sitecore.Mvc
<div>
<h1>
    @Html.Sitecore().Field("title")
</h1>
<div>
    @Html.Sitecore().Field("text")
    @System.DateTime.Now.Second
</div>
</div>

但缓存仅在正常模式下工作,而不是在体验编辑器或页面编辑器上工作。您是否尝试发布和检查您的网站?

请查看我上传的视频:https://www.dropbox.com/s/57s5x0zw7yr8lyb/VideoAvi.avi?dl=0

【讨论】:

  • 您如何验证它是否正常工作?我不太明白视频。
  • 我有@Html.Sitecore().Rendering("{240A3624-8600-4A7B-8C07-5846A673F1F0}") @Html.Sitecore().Rendering("{240A3624-8600-4A7B- 8C07-5846A673F1F0}", new { Cacheable = true,Cache_Timeout = "00:20:00" } ) 并且如果我正在刷新页面,您可以在第一次渲染时看到秒数正在变化,而在第二次视图中秒数是相同的.
  • 是的,但它会缓存 20 分钟吗?它将缓存 60 秒(Cacheable 设置为 true 时的默认值)。 15 分钟后回来,看看缓存有没有。
  • 我试过你的情况,对我来说效果很好。如果有人发布您的项目,请小心,缓存已被清除。
  • 感谢您对此进行测试。我必须对缓存有更深层次的问题。也许限制设置得太低了?也许事情会继续在后台发布?不确定,但这很有帮助。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 2015-01-24
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多