ASP.NET MVC:使用不可缓存的部分进行缓存

时间:2010-10-13 13:29:50

标签: asp.net-mvc caching

我有一个缓存的重页。这对匿名用户来说没问题。他们都看到了同一页。

问题出在登录用户身上。他们应该在每次请求时重新呈现页面的一小部分(如页面内容的个人注释等) 但是仍然应该缓存页面的其余部分(它在渲染时会执行大量的SQL和计算)。

作为一种解决方法,我将占位符放在页面模板中(例如#var1#,#var2#,..)。 然后我创建控制器方法将View渲染为字符串,我在其中执行string.Replace#var1#和其他为实际值。

任何更干净的方式来做这种局部的“非缓存”?

2 个答案:

答案 0 :(得分:2)

这称为甜甜圈缓存。

ASP.Net MVC框架目前不支持它,但它计划用于版本3.

答案 1 :(得分:1)

要开始工作,可能有必要浏览一下页面,看看是否有任何关于它的内容可以简化或减轻重量。根据事物的糟糕程度,在这里投入一些时间可能会带来回报。

也就是说,在尝试将内容服务器设置为匿名用户和登录用户时,一种选择是拥有两个版本的页面:一个用于匿名用户,另一个用于登录用户。这可能不是最好的方法,因为这意味着您现在有两个版本的同一页面需要维护。

鉴于SLaks提到的缺少支持甜甜圈缓存,我可能会尝试缓存正在为页面完成的计算结果(例如,如果您要查询数据库中的某个表数据,缓存您可以在运行操作之前检查的DataTable)并查看它对性能的影响。它可能不是世界上最优雅的解决方案,但它可以解决您遇到的问题。