搜尋

首頁  >  問答  >  主體

大家集思广益,有什么好的方法可以解决页面缓存的问题?

今天遇到了一个页面缓存的问题,找了半天以为代码错误,后来才发现是页面缓存的问题,临时想了个解决方法直接在路径后面加了个时间戳,不知道大家有什么好的方法,貌似听说有的采用文件用md5的方式命名。。。不太清楚,求指点。

高洛峰高洛峰2930 天前862

全部回覆(3)我來回復

  • 欧阳克

    欧阳克2016-11-17 14:58:12

    现在的前端基本都是工程化了,项目文件夹下面有src 和dist 文件夹,src 里面放源码。
    老项目可以直接加入gulp来解决问题,gulp简单易学,任务添加方便。
    使用gulp-rev gulp-replace 之类的就能添加文件MD5,如果能力高,可以只改页面引用的地方加入?rev=MD5,文件名称不变。
    相关用法请 npm 搜索 并查看文档

    回覆
    0
  • 三叔

    三叔2016-11-17 14:58:03

    方法一、【META】

    HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器,中间缓存服务器,Web服务器。
    meta可以用来在HTML文档中模拟HTTP协议的响应禁止缓存

    <meta http-equiv="Pragma" content="no-cache">//用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">

    缺点:在移动端比如微信浏览器,可能完全无效

    方法二:添加md5版本号

    原理:文件内容变化了,在文件名后面自动添加md5值。很多工具都可以实现,如gulp的插件gulp-rev,webpack的各种[hash]输出命名。


    回覆
    0
  • 欧阳克

    欧阳克2016-11-17 14:57:19

    这个要看你的具体需求了.

    如果你不想让页面被缓存, 即cache-control: max-age=0, 那么你加一个时间戳也是可以的.

    如果你想让浏览器强制缓存你的页面, 比如a.css这个文件, 那么你就不能用时间戳, 而应该是用带版本号后缀或内容摘要算法(MD5)的方式来加后缀或者命名文件.

    顺便说一点带版本号和MD5方式的区别, 假设你让所有css文件都缓存了, 那么当你只更新部分文件, 又不想用户放弃未更新文件的缓存时, 就可以用md5的方式, 这样就只有更新过的文件引用的URL才会变化,导致重新向服务器请求, 而未改变的则继续取用本地缓存.


    回覆
    0
  • 取消回覆