如何将 ViewComponent 拉出 ASP.NET Core 中的响应缓存控制器的操作



出于性能目的,我需要缓存主页操作的结果,同时允许登录用户的显示名称保持未缓存状态。

我曾经使用DonutOutputCache在ASP.NET MVC Framework项目上实现过类似的功能。这个系统非常有用,因为您可以将整个操作放入输出缓存,同时在缓存之外维护部分视图结果。因此,我可以有三到四个需要个性化的部分——例如,调查、分析标签、用户名和头像、基于行为的文章列表等(

你知道我是否可以用ASP.NET Core的新[OutputCache]属性或<cache />标记帮助程序来处理这个问题吗?

此刻,我把整个主页放进了一个经典的内存缓存中。如果有这样的标签助手:,那就太棒了

<cache expires-after="TimeSpan.FromMinutes(60)">
@*Cached part*@
<cache-hole>
@*Refreshed on each page refresh. This could work with a ResponseCache attribute too.*@
@await Components.InvokeAsync("UserProfile")
</cache-hole>
</cache>

我不确定您以前使用的是什么,但我不认为它实际上在做您认为的事情。输出缓存的整个点是绕过视图渲染过程,因此,缓存的任何内容都会原样返回,而不会进行进一步处理以确定是否需要渲染内部内容。

如果您缓存整个页面,那么内部就不能有任何需要根据用户而变化的部分。您只需要减少缓存内容的范围。缓存页面中没有变化的部分,这至少会让主页在渲染中占上风。这就是cache标记助手的作用。您还可以使用以下标签助手为特定用户缓存:

<cache vary-by-user="true">
<!-- user-specific stuff -->
</cache>

这仍然会渲染多次,但每个用户只渲染一次。为特定用户缓存后,将使用该缓存。

最新更新