admin 管理员组

文章数量: 887019

一、添加版本号

请求同一个页面的时候,如果url后面的参数不一样,则不会调用微信缓存中的html页面,由此可以解决html页面的缓存问题。例如加个版本号或时间戳

a,传统的文件名后带参数的方式: index.js?v=20170705;
b,现在多用的md5文件名的方式: index-8a769sh7f9d.js;

1 www.xxx/home.html?v=1.0

window.location.href="new.html?version=1.1.1"

<script type= "text/javascript"  src= "js/page_style_js/jquery.toTop.js?version=1.1.1"  ></script> <link rel= "stylesheet"  href= "css/article/article.css?version=1.1.1"  />



二、HTML文件的头部(head)处加上一些meta

以上工作完成之后,我们解决了html的缓存问题,但是通过访问nginx(或是其他工具)的日志发现,虽然带上了不同的参数,html确实不会缓存了,但是却没有js和css文件的请求。

猜测在这里,微信发现我们所请求的js和css文件在他的缓存里面有了,所以就直接打开缓存中的文件返回给了页面上。(所以这就坑爹了啊!!)

所以我们要在html文件的头部(head)处加上一些meta:

1 2 3 < 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" />

ps,网上很多答案都提供了添加在head处的meta,但是有的人说没有用。目测是因为meta只能保障js和css等资源不会被缓存,但是无法保障html不被缓存。所以,要和url参数方法于meta方法一起使用,才能保障毫无侧漏!



三、修改静态资源文件名

第二个,就来说说缓存吧,我也在网上查了下,很多方法可谓是大动干戈,有一些去专门的网站清除微信X5内核的缓存,还有一些简单粗暴的直接清理App数据的,这些都管用。但是,用户不是开发者,我们为了看到效果,可以这样做,但不可能让用户去做这些麻烦的操作。我们只能从后台去改变。

解决办法:研究了一下缓存之后发现,其缓存都是根据索引来缓存的,也就是说根据你图片资源的文件名来缓存。那么基于这个原理,我们就可以在后台把图片名字全部改了,比如你以前叫 img.jpg,现在改成 img1.jpg,当然要同时记得改html代码里的索引。

这样一来,根本不需要刷新了,再从微信里看,它找不到之前的索引了,就不得不根据html文件去更新资源,所以图片也就随之更新了,然而这个过程对用户来说不需要任何操作,岂不是很好?



四、手动清理缓存

1,android

debugx5.qq,这是微信x5内核浏览器的debug调试页面,在微信浏览器打开,拉到页面最底部,有清理缓存的选项。然而并不是所有安卓手机都能打开这个链接,比如我们遇到的zuk手机就不能打开,这也让我无能为力;可以尝试ios的方式清除。

2, ios:
               
a.  取关公众号,重新关注;
                b.  退出微信账号登陆,重新登陆微信;
                c.  微信设置-通用-存储-清理缓存;
                d.  进入页面,右上角‘...’选项中点击“刷新”;
这四种方式,在各种版本各种iphone以及各种微信版本中,都不保证能生效;有的用单一一种方式就能清除,有的需要组合方式,反正你就各种尝试组合上述方式吧,就能清除缓存了。 Android或IOS强退进程

五、后台处理

1. 设置nginx的缓存机制; 直接将nginx的缓存设置成{expires-1;},设置成永远不缓存; 如果没有nginx,其他apache什么的通用这个方法。

2. response设置禁止缓存

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("expires", -1);


后续有更多方法会不断补充!!


本文标签: 缓存 浏览器 方法 大全