如何调整Sitecore中静态绑定渲染的缓存持续时间?
在Sitecore中,我的Razor中有一个静态绑定渲染器:如何调整Sitecore中静态绑定渲染的缓存持续时间?,sitecore,Sitecore,在Sitecore中,我的Razor中有一个静态绑定渲染器: @Html.Sitecore().Rendering("[item ID]") 这很好,但我想缓存。因此: @Html.Sitecore().Rendering("[item ID]", new { Cacheable = true } ) 这也是可行的,而且似乎可以缓存大约60秒,我知道这是默认值 我想缓存20分钟(1200秒),但我找不到任何方法来指定这一点。Rendering的第二个参数是匿名对象,因此Intellisens
@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攀登者进行了更多的思考,发现了名为Timeout
的RenderingCachingDefiniton
属性,该属性似乎将Cache\u Timeout
键的值解析为Timespan
对象
然而,我对这个的实际测试
new { Cacheable = true, Cache_Timeout = "00:20:00"}
…似乎没有更改60秒缓存超时。这很奇怪,因为您可以看到RenderingCachingDefinition
类中解析匿名对象参数(Cacheable
,VaryByParam
等)的所有其他属性
当然,这可能很好地解析了,Sitecore对结果值没有任何作用。但我遵循了
Timeout
属性,根据我的阅读,它准确地用于设置缓存超时。我尝试了Sitecore 8.1解决方案,使用
@Html.Sitecore().Rendering(“{240A3624-8600-4A7B-8C07-5846A673F1F0}”,新的{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>
@使用Sitecore.Mvc
@Html.Sitecore()字段(“标题”)
@Html.Sitecore()字段(“文本”)
@System.DateTime.Now.Second
但缓存只是在正常模式下工作,而不是在体验编辑器或页面编辑器上。您是否尝试发布和检查您的网站
请检查我上传的视频:我认为它不是现成的。你能检查一下这个解决方案吗。你能试试缓存超时吗?我反编译代码,TimeOut属性如下所示:TimeSpan结果;if(TimeSpan.TryParse(this.Rendering[“Cache_Timeout”],out result))返回结果;是的,我找到了相同的代码。我试过了,但似乎不起作用。我把
00:20:00
放在那里,应该精确解析到20分钟。我的测试过程:我的Razor模板中有一行@DateTime.Now.ToLongTimeString()
。我可以一次又一次地点击刷新,但它仍然大约每60秒改变一次。我想知道这是否必须在管道中完成?我也尝试过,但我不确定静态绑定的项目是否会进入管道。这听起来很奇怪,我知道,但在管道中插入了一个断点,然后看着一切顺利通过。据我所知,我的四个静态绑定渲染器从未通过。你是如何验证它是否正常工作的?我不太理解视频。我有@Html.Sitecore().Rendering({240A3624-8600-4A7B-8C07-5846a673f0}”)@Html.Sitecore().Rendering({240A3624-8600-4A7B-8C07-5846a673f0}),新的{Cacheable=true,Cache_Timeout=“00:20:00})如果我刷新页面,你可以在第一次渲染时看到,秒数在变化,在第二次查看时,秒数是相同的。是的,但它会缓存20分钟吗?它将缓存60秒(如果Cacheable
设置为true
,则为默认值)。15分钟后回来,看看缓存是否有效。我试过你的案子,对我来说效果很好。如果有人正在发布您的项目,请小心,缓存已清除。感谢您测试此项。我必须有一个更深层次的问题与缓存。也许限制设定得太低了?也许事情会继续在后台发布?不确定,但这很有帮助。再次感谢。