3

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

我曾经使用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>
4

1 回答 1

2

我不确定您以前使用的是什么,但我认为它实际上并没有按照您的想法进行。输出缓存的全部意义在于绕过视图渲染过程,因此,您缓存的任何内容都按原样返回,而不是进一步处理以确定是否需要渲染内部的某些内容。

如果您缓存整个页面,那么您不能在内部有任何需要因用户而异的部分。您只需要缩小缓存内容的范围。缓存页面中不变的部分,这至少可以让主页在渲染中占据优势。这就是cache标签助手的用途。您还可以使用此标签助手为特定用户缓存:

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

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

于 2018-11-21T14:10:57.553 回答