如何在 ASP.NET 核心中将 ViewComponent 拉到响应缓存控制器的操作之外
How to pull a ViewComponent outside a response cached controller's action in ASP.NET Core
出于性能目的,我需要缓存主页操作的结果,同时允许登录用户的显示名称保持未缓存状态。
我曾经使用 DonutOutputCache 在 ASP.NET MVC 框架项目上实现类似的东西。该系统非常有用,因为您能够将整个操作放入输出缓存中,同时在缓存外部维护部分视图结果。因此,我可能有三四个需要个性化的部分——例如,调查、分析标签、用户名和头像、基于行为的文章列表等)。
您知道我是否可以使用 ASP.NET Core 的新 [OutputCache]
属性或 <cache />
Tag Helper 来处理这个问题?
目前,我将整个主页放入经典内存缓存中。如果有这种 Tag Helper 就好了:
<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>
这仍然会呈现多次,但每个用户只会呈现一次。为特定用户缓存后,将使用缓存。
出于性能目的,我需要缓存主页操作的结果,同时允许登录用户的显示名称保持未缓存状态。
我曾经使用 DonutOutputCache 在 ASP.NET MVC 框架项目上实现类似的东西。该系统非常有用,因为您能够将整个操作放入输出缓存中,同时在缓存外部维护部分视图结果。因此,我可能有三四个需要个性化的部分——例如,调查、分析标签、用户名和头像、基于行为的文章列表等)。
您知道我是否可以使用 ASP.NET Core 的新 [OutputCache]
属性或 <cache />
Tag Helper 来处理这个问题?
目前,我将整个主页放入经典内存缓存中。如果有这种 Tag Helper 就好了:
<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>
这仍然会呈现多次,但每个用户只会呈现一次。为特定用户缓存后,将使用缓存。