精华内容
下载资源
问答
  • 页面缓存规则

    2021-02-26 17:18:03
    页面部署到服务器后需做到按F5刷新就能保持页面为最新文件,无需手动清除缓存.总体思路,通过修改url地址来防止页面缓存.具体规则如下:csscss有变动时手动修改版本号v,代码如下:待补充:动态版本控制ajax get方式禁止...

    页面部署到服务器后需做到按F5刷新就能保持页面为最新文件,无需手动清除缓存.

    总体思路,通过修改url地址来防止页面缓存.具体规则如下:

    css

    css有变动时手动修改版本号v,代码如下:

    待补充:动态版本控制

    ajax get方式禁止缓存方法

    加上cache:false

    $.ajax({

    type : "GET",

    url : "../system/user/getCurrentUser",

    data:'json',

    //禁止缓存

    cache:false,

    success : function(data) {

    $(".name").html(data.fullName);

    }

    });

    js

    1.在页面中引入js

    //获取缓存版本号

    if(typeof(cacheVersion)=="undefined"){

    $.ajax({

    type : "GET",

    url : headHref+'js/cache-version.js',

    dataType: "script",

    async:false

    });

    }

    if(typeof(cacheVersion)=="undefined"){

    var cacheVersion="";

    }

    //所有要引入的js,iframe写在获取缓存版本号后

    $.ajax({

    type : "GET",

    //需要引入的js

    url : headHref+"example.js?v="+cacheVersion,

    dataType: "script",

    cache:true,

    success : function(data) {

    //需在此js(config)之后执行的js

    }

    });

    $.ajax({

    type : "GET",

    //需要引入的js

    url : headHref+"exampleB.js?v="+cacheVersion,

    dataType: "script",

    cache:true,

    success : function(data) {

    //需在此js(config)之后执行的js

    }

    });

    //iframe加载

    if($(thisO).attr("href").indexOf("?") == -1){

    $(frame).src = $(thisO).attr("href")+"?v="+cacheVersion;

    }else{

    $(frame).src = $(thisO).attr("href")+"&v="+cacheVersion;

    }

    2.修改cache-version.js文件

    页面引入的js文件或iframe页面有变动时,修改父页面所在项目cache-version.js中cacheVersion的值

    iframe

    方法一 通过target=iframe生成iframe,并修改cacheVersion(版本号大于等于tm-init-v0.1.5)

    方法二,加载地址为js控制

    修改cacheVersion并编写代码,代码见js部分

    转载至链接:https://my.oschina.net/u/3146772/blog/1829721

    展开全文
  • 使用php进行页面缓存

    2021-04-29 03:25:16
    PHP以输出缓冲的形式提供了一种非常简单的动态缓存解决方案.如果在最近5分钟内缓存了该站点的首页(生成最多流量),则现在可以从缓存副本提供.$cachefile = "cache/".$reqfilename.".html";$cachetime = 5 * 60; // 5 ...

    PHP以输出缓冲的形式提供了一种非常简单的动态缓存解决方案.如果在最近5分钟内缓存了该站点的首页(生成最多流量),则现在可以从缓存副本提供.

    $cachefile = "cache/".$reqfilename.".html";

    $cachetime = 5 * 60; // 5 minutes

    // Serve from the cache if it is younger than $cachetime

    if (file_exists($cachefile) && (time() - $cachetime

    < filemtime($cachefile)))

    {

    include($cachefile);

    echo "n";

    exit;

    }

    ob_start(); // start the output buffer

    ?>

    .. Your usual PHP script and HTML here ...

    // open the cache file for writing

    $fp = fopen($cachefile, 'w');

    // save the contents of output buffer to the file

    fwrite($fp, ob_get_contents());

    // close the file

    fclose($fp);

    // Send the output to the browser

    ob_end_flush();

    ?>

    这是一个简单的缓存类型,

    你可以在这里看到它

    你可以使用Smarty有缓存技术

    展开全文
  • 在写静态网站的时候,经常回面临某些页面上传更新后,查看时会出现没有更新的清空,就是因为浏览器读取了缓存造成的,需要清空缓存刷新才可以看到页面的更新,但是有些用户不知道这些操作。就很头痛 浏览器缓存...

    问题

    在写静态网站的时候,经常回面临某些页面上传更新后,查看时会出现没有更新的清空,就是因为浏览器读取了缓存造成的,需要清空缓存刷新才可以看到页面的更新,但是有些用户不知道这些操作。就很头痛

    浏览器缓存(强制缓存与协商缓存)

    强制缓存

    当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。

    协商缓存

    协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程

    具体的浏览器的缓存原理,这里就不说了,我也不是太明白,可以看下这篇文章
    https://juejin.cn/post/6844903593275817998

    解决办法

    为页面加入meta标签

    head中添加meta标签以下内容,禁止缓存加载,直接请求服务器

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    

    Cache-Control作用于HTTP1.1
    Pragma作用于HTTP1.0
    Expires作用于proxies

    这样浏览器在资源没修改的时候也不能加载缓存,十分影响体验,毕竟不能一棍子打死,在解决静态资源的时候,还可以为其添加版本号来控制。

    js、css加上版本号

    在引用链接的后面加入相应的版本号,每次修改

    <link rel="stylesheet" href="style.css?v=1.0.0">
    <script src="main,js?v=1.0.0"></script>
    

    问号后面的不起实际作用,仅当作后缀,让浏览器自动检测更新最新的css,js等静态文件。如果用问号加参数的方法,可以添加版本号等信息,同时可以刷新一下浏览器端的缓存。这样在使用静态文件的时候会方便很多,当然也可以修改资源的名称这里就不再说了。

    href=“style.css?v=1.0.0
    src=“main,js?v=1.0.0


    相关知识

    Expires

    Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。

    Expires是HTTP/1.0的字段,但是现在浏览器默认使用的是HTTP/1.1,那么在HTTP/1.1中网页缓存还是否由Expires控制?

    到了HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因(例如时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存则会直接失效,这样的话强制缓存的存在则毫无意义,那么Cache-Control又是如何控制的呢?

    Cache-Control

    在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为

    • public:所有内容都将被缓存(客户端和代理服务器都可缓存)
    • private:所有内容只有客户端可以缓存,Cache-Control的默认取值
    • no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
    • no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
    • max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效

    相关链接:https://zhuanlan.zhihu.com/p/83091549
    https://juejin.cn/post/6844903593275817998

    展开全文
  • 一书 第二章的读书笔记我们要缓存的就是形式如下面的url http://test.com/shwoItem?item=itemX设计方案 第一个域,是zset类型的------key是viewed:userSessionid存放的是商品id与用户查看此商品时的timestamp第二个域...

    本文是<>一书 第二章的读书笔记

    我们要缓存的就是形式如下面的url http://test.com/shwoItem?item=itemX

    设计方案 第一个域,是zset类型的------key是viewed:userSessionid

    存放的是商品id与用户查看此商品时的timestamp

    第二个域,是zset类型的------可以是viewed:

    member是商品id(全局范围内),score是商品被用户(全局范围内)浏览的次数(是负数)

    第三个域,是hash类型的------key是item:itemId

    存放的是商品的信息

    用户查看了某件商品

    public void viewItem(Jedis conn, String token, String user, String item) {

    long timestamp = System.currentTimeMillis() / 1000;

    if (item != null) {

    //用户user在某时浏览了某件商品

    conn.zadd("viewed:" + token, timestamp, item);

    //只记录用户最近查看的25件商品

    conn.zremrangeByRank("viewed:" + token, 0, -26);

    //有序set里 score的越小排名越靠前

    conn.zincrby("viewed:", -1, item); //-1还是1?

    }

    }

    试着缓存这个页面 首先我们要判断,某个url是否能缓存

    /**

    * 如果request 不符合规范 就不缓存 返回false

    * 如果商品还没有被访问过 自然不能缓存 返回false

    * 如果商品被访问过 但是访问的排名在10000之后 也就不缓存了 返回false

    * 如果商品被访问过 且访问的排名在10000之内 就说明可以缓存 返回true

    *

    * @param conn

    * @param request

    * @return

    */

    public boolean canCache(Jedis conn, String request) {

    //从类似http://test.com/shwoItem?item=itemX

    //这样的字符串中获得paramter 代码就不赘述了

    Map params = getParams(request);

    if (params == null)

    return false;

    //获得itemX这个信息

    String itemId = extractItemId(params);

    //params.containsKey("_") 这个条件只是示例

    //用户可以加上自己的判别条件

    if (itemId == null || params.containsKey("_")) {

    return false;

    }

    // viewed:这个有序集里存放的是 商品的访问次数

    Long rank = conn.zrank("viewed:", itemId);

    // 查看这个商品的访问量是否在前10000内

    //如果rank==null 说明商品还没有被访问过

    return rank != null && rank < 10000;

    }

    实现缓存request

    public String cacheRequest(Jedis conn, String request, Callback callback) {

    if (!canCache(conn, request)) {

    return callback != null ? callback.call(request) : null;

    }

    String pageKey = "cache:" + hashRequest(request);

    //这个只是示例 真实的情况 应该是复杂的业务逻辑产生最后的反馈页面

    String content = conn.get(pageKey);

    if (content == null && callback != null) {

    content = callback.call(request);

    //我们可以认为这个content就是html

    //我们将要显示的数据缓存5分钟

    conn.setex(pageKey, 300, content);

    }

    return content;

    }传入的callback如下:

    Callback callback = new Callback() {

    public String call(String request) {

    return "content for " + request;

    }

    };

    我们看看测试代码

    package redisinaction;

    import org.junit.BeforeClass;

    import org.junit.Test;

    import redis.clients.jedis.Jedis;

    import redisinaction.Chapter02.Callback;

    /**

    * This class is used for ...

    * @author dlf(460795365@qq.com)

    * @version 1.0, 2016年10月18日 下午9:34:27

    */

    public class Chapter02Test {

    static Jedis conn = null;

    static Chapter02 ch2=null;

    @BeforeClass

    public static void initConn(){

    System.out.println("test before");

    ch2=new Chapter02();

    conn = new Jedis("10.150.0.80");

    conn.auth("dlf123123");

    }

    @Test

    public void testCacheRequest() {

    Callback callback = new Callback() {

    public String call(String request) {

    return "content for " + request;

    }

    };

    //必须先viewItem 否则不管调用几次cacheRequest 都不能缓存

    //为什么? 自己想

    ch2.viewItem(conn, "dlf_session_id", "dlf", "itemX");

    String url = "http://test.com/?item=itemX";

    String result = ch2.cacheRequest(conn, url, callback);

    System.out.println( result);

    String result3 = ch2.cacheRequest(conn, url, null);

    System.out.println(result3);

    String result4 = ch2.cacheRequest(conn, url, null);

    System.out.println(result4);

    }

    }

    全局范围内被用户查看最多的n件产品(和上一章那个文章排序差不多)

    private static final int ARTICLES_PER_PAGE = 25;

    public List> getMostPopulate(Jedis conn, int page) {

    int start = (page - 1) * ARTICLES_PER_PAGE;

    int end = start + ARTICLES_PER_PAGE - 1;

    Set ids = conn.zrevrange("viewed:", start, end);

    List> items = new ArrayList>();

    for (String id : ids){

    Map itemData = conn.hgetAll(id);

    itemData.put("id", id);

    items.add(itemData);

    }

    return items;

    }

    在viewItem里,我们已经记录了所有商品的浏览次数(负数)

    conn.zincrby("viewed:", -1, item);

    那么经过n天后,这个viewed里的数据项就很多了,而且其实也没有必要一直保存着所有商品的浏览次数

    所以

    public class RescaleViewedThread implements Runnable{

    private Jedis conn;

    private boolean quit;

    public RescaleViewedThread(int limit) {

    conn = new Jedis("10.150.0.80");

    conn.auth("dlf123123");

    }

    public void shutDown(){

    quit=true;

    }

    @Override

    public void run() {

    while (!quit) {

    try {

    //移除排名20000之后的商品浏览信息

    conn.zremrangeByRank("viewed:", 0, -20001);

    //将所有商品的浏览数量降低一半

    conn.zinterstore("viewed","viewed:0.5");

    Thread.sleep(300);

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }系统启动后就,一直运行这个线程。

    那么怎么做呢?怎么集成到我的项目里呢?我的项目是使用struts2开发的。

    哥哥,您不知道有个东西叫拦截器么?interceptor?

    这个是springmvc的?struts怎么用?

    笨死!

    在struts2的拦截器里获得request和response你不会么?

    展开全文
  • 页面缓存解决方案 keep-alive 1. //*.vue <template> <router-link to:"/" /> <router-link to:"/about" /> //固定写法 <router-view v-slot={Component}> <keep-alive :includes=...
  • 我的5+app需要打开一些html5网页,由于这些html5网页随时会更新代码,所以我想禁用缓存,每次都加载最新的。我在app中打开html5网页时,使用如下代码:mui.openWindow({id: id,url: href,extras: extras,styles:{...
  • 微信的H5页面缓存清理方案

    千次阅读 2021-05-27 15:46:25
    方案1、微信手动清理 安卓端的微信,打开:... IOS端的微信,清除缓存方法如下:1.打开微信,找到“我-设置-通用-存储空间-清理微信缓存” 2.清理缓存后,刷新页面,如果无效,多刷几次即可 ...
  • php页面缓存实现方法

    2021-03-31 08:37:27
    php页面缓存实现方法PHP利于学习,使用广泛,主要适用于Web开发领域。以下是为大家分享的php页面缓存实现方法,供大家参考借鉴,欢迎浏览!在php页面缓存主要用到的是ob系列...ob_start():页面缓存开始的标志,此函...
  • 比如有一个列表页面,然后列表每项都有一个详情,之前用vue1.x的时候,页面缓存基本没有什么问题。在vue2.0中出现了列表页面是每次都重新加载数据,但是详情页面却只在第一次加载的时候调用数据,如果返回到列表再...
  • 功能实现页面缓存a. 自动生成缓存文件夹且能保存缓存文件b. 清除缓存文件c. 根据页面文件动态生成缓存文件名d. 记录缓存文件建立时间e. 读取缓存2,处理输出缓冲的相关资函数介绍:ob_start() 开始输出缓冲, 这时PHP...
  • 一、设置页面缓存1、直接在页面上用声明来缓存页面2、使用服务端方法://将Cache-Control标头设置为HttpCacheAbility值Response.Cache.SetCacheability(HttpCacheability.Public);//将页面的绝对过期时间Response....
  • H5页面手机端缓存太大解决方案1、在项目根目录文件中设置2、nginx部署配置 最近做一个供手机app调用的h5页面功能,使用vue做的,过程中发现项目缓存着实太大,解决方案如下: 1、在项目根目录文件中设置 <meta ...
  • VUE实现页面缓存

    2021-10-27 09:08:42
    主要利用keep-alive实现从列表页跳转到详情页,然后点击返回时,页面缓存不用重新请求资源。 一、在router里配置路由 import Vue from "vue"; import Router from "vue-router"; // 避免到当前位置的冗余导航 const...
  • 下面我们来看一篇关于Framework7中页面缓存的一个配置了,希望文章能够让各位理解到Framework7 页面缓存设置吧。Framework7 是使用 ajax 加载新页面的。所以为了效率,其默认是开启缓存的(同一个请求页面默认缓存...
  • js页面缓存问题

    2021-06-12 08:31:49
    1.在HTML中加入头或者加入清除临时缓存2.在action,使用如下声明response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires",0);3.随机参数...
  • 在vue实际开发中(开发的都是单页应用),我们都使用Vue-Router做页面导航,而每次切换路由的时候,页面都是会进行重新加载的,对应的所有周期页面被重新执行一遍。 但是,有一些场景却需要我们把页面状态保存下来,...
  • 问题描述触发route是添加页面缓存,删除对应的tab时删除该页面缓存问题出现的环境背景及自己尝试过哪些方法现在用的是keep-alive里的:include=”cached”但是要在很多页面加name代码:“触发route添加tabsetTab ...
  • 禁止页面缓存的办法

    2021-04-12 21:37:39
    php禁止页面缓存的办法//设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');//设置此页面的最后更新日期(用格林威治时间表示)为当天,可以...
  • php页面缓存

    2021-03-22 19:51:28
    推荐:php缓存技术缓存是指临时文件交换区,电脑把最常用的文件从...电脑里最大的这几天接触了phpcms的页面缓存,有些感触。其好处就不多说了,它一般是用在数据库查询较多的页面中,对于插入修改删除的页面就不大...
  • VUE清除keepalive页面缓存

    千次阅读 2020-12-20 10:58:56
    代码如下:(代码说明:store.state.pages是我存储标签页的列表,记录了当前打开的标签页的路由数据)旧的方法://使用Vue.mixin的方法拦截了路由离开事件,并在该拦截方法中实现了销毁页面缓存的功能。let ...
  • redis实现web页面缓存

    2021-04-28 09:55:04
    1、网页缓存在动态生成网页的时候通常会使用模板语言来简化网页的生成操作,现在的web网页通常由头部、尾部、侧栏菜单、工具条、内容域的模板生成,有时候模板还用于生成javascript,但是对于一些不经常发生变化的...
  • 第一步 在app中设置需要缓存的div//缓存页面//不缓存页面第二步 在路由router.js中设置.vue页面是否需要缓存{path: '/',name: 'HomePage',component: HomePage,meta: {keepAlive: false, //此组件不需要被缓存is...
  • .html页面缓存问题

    2021-09-15 14:48:01
    但是浏览器把整个html页面缓存就稍微麻烦些。 html静态文件缓存: 1、一般设置了静态文件的缓存,都会设置文件的协商缓存。所以每次请求下载文件时,都会返回一个http响应Last-Modified:文件修改时间1。用户访问...
  • vue 路由页面缓存

    2021-08-04 14:47:02
    这次说说VUE里缓存页面的问题 现在前端做APP的话,估计很少人会直接去用VUE cli来写,因为那样特别麻烦,你得配置很多东西。填很多坑!现在如果要求前端H5来做个APP,估计大家很多都会选择uniapp,MUI等这些主流框架...
  • 背景在移动端中,页面跳转之间的缓存是必备的一个需求。例如:首页=>列表页=>详情页。从首页进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要保持页面缓存。对于首页,一般我们都会让其一直...
  • 实际使用 通过上两步已经让缓存跟vueX关联上了,我们只需要在需要缓存页面通过this.$store.commit(‘pushKeepAlives’, ‘XXXXX’),来操作keepAlives这个数组,在app.vue会监听这个数组的变化从而实现缓存具体...
  • 最近接触到了CodeIgniter开源轻量级架构,集合了开发中常用的类和功能函数,关于CodeIgniter的缓存总结有以下几点:1. 数据库缓存数据库缓存主要是针对于SELECT查询// 打开缓存开关$this->db->cache_on();$...
  • 实现场景:在页面中我们要实现每个页面自己能控制是否缓存,即是否每次进入页面是否需要刷新页面,每个页面有不同的需求,并且在全局有一个按钮能在每个当前页面按这个按钮都可以刷新。 一、页面缓存 找到页面的...
  • 清除页面的方法:使用“header("Last-Modified...在开发过程中我们常常会遇到页面缓存的问题(特别是html的缓存);刷新后还是旧版的数,再刷新下还是旧版数据,慢慢的开始怀疑人生了,哈哈;所以在开发过程中我们又必...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 711,479
精华内容 284,591
关键字:

页面缓存

友情链接: LiquidCrystal.rar