加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC缓存如何为AJAX请求工作?

发布时间:2020-12-16 04:16:10 所属栏目:asp.Net 来源:网络整理
导读:我刚刚开始研究缓存以提高性能,并对缓存 AJAX调用提出疑问. 我有一个动作,用于查询twitter,然后返回结果.在用户按下按钮的时刻,它加载旋转的gif,同时进入动作以进行查询,然后返回局部视图.然后jQuery使用视图中的HTML响应更新div.通常这需要大约5秒.然后他们
我刚刚开始研究缓存以提高性能,并对缓存 AJAX调用提出疑问.

我有一个动作,用于查询twitter,然后返回结果.在用户按下按钮的时刻,它加载旋转的gif,同时进入动作以进行查询,然后返回局部视图.然后jQuery使用视图中的HTML响应更新div.通常这需要大约5秒.然后他们有一个更多的按钮,以获得更多的结果.

如果我将CachingAttribute放在此操作上会发生什么?我知道我可以尝试但我只是想解释事情的技术方面.

谢谢

这是我的Javascript:

$('#blogEntryList #moreLink').live("click",function() {


                $('#morespan').toggle();
                $('#loader').toggle();

                $.get($(this).attr("href"),function(response) {
                    $('#blogEntryList ol').append($("ol",response).html());
                    $('#blogEntryList #moreLink').replaceWith($("#moreLink",response));
                    $('#loader').hide();
                    $('#morespan').show();
                });
                return false;
            });

这是我修改过的动作:

[OutputCache(
    Location = OutputCacheLocation.Server,Duration = 100,VaryByParam = "")]
        public ActionResult BlogPosts(int? entryCount)
        {
            if (!entryCount.HasValue)
                entryCount = defaultEntryCount;

            int page = entryCount.Value / defaultEntryCount;

            IEnumerable<BlogData> pagedEntries = GetLatestEntries(page,defaultEntryCount);

            if (entryCount < totalItems)
                AddMoreUrlToViewData(entryCount.Value);

            return View("BlogEntries",pagedEntries);
        }

解决方法

以下是它的工作原理:假设在服务器端没有指定缓存,默认情况下,GET请求将由浏览器缓存,POST请求不缓存,除非您在发送允许覆盖客户端缓存的AJAX请求时指定cache:true属性战略.

现在在服务器端,您可以使用[OutputCache]来装饰控制器操作
这将允许您定义不同的缓存策略.您可以在服务器,下游代理服务器或客户端上保留缓存.您还可以管理不同的过期策略.

让我们通过一个例子来说明这一点:

[OutputCache(
    Location = OutputCacheLocation.Server,Duration = 10,VaryByParam = "")]
public ActionResult Hello()
{
    return Content(DateTime.Now.ToLongTimeString(),"text/plain");
}

在客户端:

$.ajax({
    url: '/home/hello',type: 'post',success: function (result) {
        alert(result);
    }
});

此控制器操作的结果将缓存在服务器上10秒钟.这意味着服务器将在每个请求中被命中,但如果存在缓存版本,则不会执行该操作,并且将直接从此缓存提供服务.在第一个请求达到控制器操作的10秒后,缓存将过期并重复相同的过程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读