0

我在 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>

}
4

1 回答 1

1

您对 OutputCache 如何工作的假设是正确的。您可以检查 firebug 或 chrome 工具来查看到达您页面的传出请求吗?如果您使用 jQuery,有时人们会将 $.get 或 $.ajax 上的缓存属性设置为 false,这会导致对页面的请求具有时髦的尾随查询字符串。我犯了一个错误,即全局设置它以解决 jQuery 和 IE 的一些问题:

http://api.jquery.com/jQuery.ajaxSetup/

这里要查看的另一个是数据库调用的分组。您是否只是通过一个请求打了很多电话?您是否在另一个阅读器中循环执行 db 命令?这种情况下的代码会很有帮助。

祝你好运,我希望这会有所帮助!

于 2013-02-12T21:48:31.970 回答