zoukankan      html  css  js  c++  java
  • 【ASP.NET】使用Jquery缓存数据

    前言

    最近接手优化页面加载的任务。
    分析其中一个原因是菜单页面ajax异步加载,页面很大,但是除非权限更改或者切换角色,否则每次请求返回数据不变,这个完全可以放在客户浏览器内进行缓存。

    分析

    粗略一分析,想把返回数据缓存在浏览器中,只要保证请求的链接不变就默认会保存吗,操作一番就被啪啪打脸了,看来又是一个盲区了,谷歌百度启动搜索,找到这两篇文章:
    MVC中使用jquery的浏览器缓存问题
    MVC缓存
    根据这两篇文章内容结合自己的需求,终于解决了。

    方案

    在Jquery中使用ajax加载必须设置:

     $.ajax({
         ifModified: true,
         cache: true,
     });
    

    接下来是服务器端,在这里有两个方法,可根据需求决定使用哪种:

    方案一:

    直接返回304,通过条件判断是否需要刷新值

    public ActionResult Index()
    {
        //这里根据需求设定条件
        if (true)
        {
            Response.StatusCode = 304;
            Response.StatusDescription = "Not Modified";
            return Content(String.Empty);
        }
        return View()
    }
    

    方案二:

    在方法上加OutputCacheAttribute特性,我使用的是其中Duration和Location属性:

    1)Duration:缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的。在每次更新后的缓存时间内的请求直接返回302,不进入方法。

    2)Location:枚举类型,缓存的位置。当设置成None时,所有缓存将失效,默认为Any。

    Any:页面被缓存在浏览器、代理服务器端和web服务器端;

    Client:缓存在浏览器;

    DownStream:页面被缓存在浏览器和任何的代理服务器端;

    Server:页面被缓存在Web服务器端;

    None:页面不缓存;

    ServerAndClient:页面被缓存在浏览器和web服务器端;

    [OutputCacheAttribute(Duration = 60,Location=System.Web.UI.OutputCacheLocation.Client)]
    public ActionResult Index()
    {
        //If-Modified-Since:为客户端本地缓存最后更新时间
        //根据更新时间进行判断
        if (Request.Headers["If-Modified-Since"] != null)
        {
            return new HttpStatusCodeResult(System.Net.HttpStatusCode.NotModified);
        }
        return View();
    }
    
  • 相关阅读:
    网页加载进度条
    【转载】通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
    前端知识复习:Html DIV 图文混排(文字放在图片下边)
    NOPI导出Excel
    C# 发送邮件
    DataSetToList 和 DataTableTolist 转换
    一个修改版的PHP ajax Tree树形菜单
    你的站为什么百度无动于衷——10年老站长的SEO肺腑之言 .
    关于php使用phpqrcode生成二维码的完整源码下载
    php结合phpqrcode生成带图片LOGO的二维码
  • 原文地址:https://www.cnblogs.com/NBDWDYS2214143926/p/11837404.html
Copyright © 2011-2022 走看看