我在WebMatrix Razor ASP.Net网站上有很多页面,我添加了一行代码:
Response.OutputCache(600);
从阅读它开始,我认为这意味着IIS会创建页面生成的html缓存,在接下来的10分钟内提供html,在下一个请求进入10分钟后,它会运行代码再次。
现在,页面正在作为定时jquery调用的一部分被提取。客户端中的时间码每分钟运行一次。那里的代码非常简单:
function wknTimer4() {
$.get('PerfPanel', function(data) {
$('#perfPanel').html(data);
});
它偶尔会出现缓存,但是当我查看在10分钟内完成的数据库查询的数量时,我可能会有超过100个数据库查询。我知道缓存不像我期望的那样工作。缓存只适用于单个会话吗?还有其他一些限制吗?
更新:无论客户端做什么,无论是通过jQuery调用还是直接html获取页面,它都无关紧要。如果服务器正在缓存,那么客户端做什么并不重要。
更新2:此处转储完整代码。无聊的东西:
@{
var db = Database.Open("LOS");
var selectQueryString = "SELECT * FROM LXD_funding ORDER BY LXDOrder";
// cache the results of this page for 600 seconds
Response.OutputCache(600);
}
@foreach (var row in db.Query(selectQueryString) ){
<h1>
<a href="Dashboard/FundingDetails/@row.Status">@row.quotes</a> Loans @row.NALStatus, oldest @(NALWorkTime.WorkDays(row.StatusChange,DateTime.Now)) days
</h1>
}
答案 0 :(得分:1)
您对OutputCache如何工作的假设是正确的。您是否可以查看firebug或chrome工具来查看到达页面的传出请求?如果您正在使用jQuery,有时人们会将$ .get或$ .ajax上的缓存属性设置为false,这会导致对页面的请求具有时髦的尾随查询字符串。我错误地在全局设置它以解决jQuery和IE的一些问题:
http://api.jquery.com/jQuery.ajaxSetup/
另一个要看的是DB调用的分组。你只是用一个请求打了很多电话吗?你是在一个循环中,在另一个读者中执行db命令吗?在这种情况下,代码会有所帮助。
祝你好运,我希望这会有所帮助!