我有一个缓存的重页。这对匿名用户来说没问题。他们都看到了同一页。
问题出在登录用户身上。他们应该在每次请求时重新呈现页面的一小部分(如页面内容的个人注释等) 但是仍然应该缓存页面的其余部分(它在渲染时会执行大量的SQL和计算)。
作为一种解决方法,我将占位符放在页面模板中(例如#var1#,#var2#,..)。 然后我创建控制器方法将View渲染为字符串,我在其中执行string.Replace#var1#和其他为实际值。
任何更干净的方式来做这种局部的“非缓存”?
答案 0 :(得分:2)
这称为甜甜圈缓存。
ASP.Net MVC框架目前不支持它,但它计划用于版本3.
答案 1 :(得分:1)
要开始工作,可能有必要浏览一下页面,看看是否有任何关于它的内容可以简化或减轻重量。根据事物的糟糕程度,在这里投入一些时间可能会带来回报。
也就是说,在尝试将内容服务器设置为匿名用户和登录用户时,一种选择是拥有两个版本的页面:一个用于匿名用户,另一个用于登录用户。这可能不是最好的方法,因为这意味着您现在有两个版本的同一页面需要维护。
鉴于SLaks提到的缺少支持甜甜圈缓存,我可能会尝试缓存正在为页面完成的计算结果(例如,如果您要查询数据库中的某个表数据,缓存您可以在运行操作之前检查的DataTable)并查看它对性能的影响。它可能不是世界上最优雅的解决方案,但它可以解决您遇到的问题。