谈谈缓存(前后端处理缓存的具体方法)

之前我的组长问了我一个有关缓存的问题,前端怎么做缓存。但是我之前缓存方面的知识了解不多,最近查了相关方面资料,有了比较深的认识,在这里做个总结。

Web缓存概念

Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。

如何进行缓存

web页面中包括有很多资源,如JS,CSS,图片,页面的访问者进行网页浏览时,会进行很多HTTP请求来下载这些资源。当然第一次访问页面的时候,请求下载是不可避免的,缓存则是为了在后续的页面访问中避免重复的请求下载。设置缓存有以下几个方法,都是用后端通过服务器框架来设置:

  • Expires头:

web服务器用expires来告诉web客户端它可以使用一个资源的当前副本,直到限定时间为止
Expires: Sunday 26 October 2019 01:00 GMT
如果为页面中某个资源如JS文件返回了这个头,浏览器在后续的页面浏览中会使用缓存的JS文件

  • 同时指定Expires和Cache-Control中的 max-age

Cache-Control:max-age=100000000
Expires有一些短板,要求服务器和客户端时钟严格同步,过期时间需要经常检查,当快过期时还要在服务器重新配置新的日期。但是max-age设置的时间没有固定到哪天,是限定资源被首次请求后的一段时间。而HTTP1.1及以上版本才支持Cache-Control,所以保险操作是仍设置Expires。

如何不使用缓存

这里说的不使用缓存是指将资源配置为浏览器代理缓存后,当我们更新了这些资源到服务器,用户如何再次请求新的资源。当设置了Expires头,直到过期之前浏览器不会检查任何更新,一直使用硬盘的缓存版本。

最有效的方法是修改链接,这样全新的请求将从原始服务器下载最新的内容

Etag——比较服务器文件和浏览器缓存文件的匹配

当缓存的资源过期了,或者用户刷新了页面。浏览器在使用这份缓存资源前先检测它是否有效,这被称为条件GET请求,执行有效性检查。如果浏览器缓存有效,原始服务器不会返还整个资源文件,而是“304 Not Modified”。

而服务器检测缓存组件与服务器组件的匹配依靠Etag和Last-Modified:
  • Last-Modified:浏览器使用缓存文件的If-Modified-Since头将最新修改日期传到服务器做比较,如果匹配服务器资源的最新修改日期,那么返还304响应,而不是整个资源文件;
  • Etag:一种实体标签,位置标志了一个资源文件的某个特定版本的字符串,由服务器来根据资源文件的特定信息生成添加。但是Etag用于多台服务器的网站会影响到服务器性能和增加带宽开销,因为*相同的资源文件*,通过*不同服务器*进行请求,尽管在服务器上该资源文件一切属性位置都想同,但是不同的服务器仍然拥有不同的iNode和*Etag*。

Etag之外的前端缓存——给资源文件添加hash

设置Expires和max-age为最大时间的同时,同时设置Etag,前端生成各类资源文件的时候添加唯一的hash值构成文件名,这样只要放到服务器上的资源文件其带有hash值的文件名没有改变,浏览器永远使用缓存,并且不会发出任何请求,返回from disk cache或者from memory cache,这其中的区别如下:

200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存。此时的数据时缓存到内存中的,当kill进程后,数据将不存在
200 from disk cache 不访问服务器,直接读缓存,从磁盘中读取缓存,当kill进程时,数据还是存在。
304 Not Modified 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。

前端缓存方案

  1. HTML文件不做缓存
  2. CSS和JavaScript,使用MD5,时间戳,版本号和长缓存方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 2018-1-25为丈夫祷告: 听从主话!(创26:5) 【经文】【创26:5】都因亚伯拉罕听从我的话,遵守我的吩...
    Nancy荣美阅读 2,024评论 2 1
  • 【日精进打卡第286天】 组别:第224期利他二组 姓名:余成杰 公司:宁波贞观电器有限公司 【知~学习】 《六项...
    余成杰阅读 121评论 0 0
  • 你知不知道,我爱你就像飞蛾扑火一样。两个人的回忆总是一个人过,你的不在意合成了所有的回忆冷漠的像垃圾一样的扔给我,...
    有梦898阅读 183评论 0 0
  • 瑟筝三弄远钟鸣, 满城几时风雨晴。 朱门万巷烛锣响, 落红千度绣春刀。
    冉子歌follower阅读 287评论 0 0
  • 斯特拉斯堡(法语:Strasbourg;德语:Straßburg[5],意为“街道城堡”),很美! 斯特拉斯堡目前...
    少儿西笑阅读 234评论 0 1