查看原文
其他

【第374期】网站的缓存类型跟用户行为对浏览器缓存的影响

2015-10-08 万马奔腾 前端早读课

前言

节后上班第一天,早读君也回归正常的工作状态并可以有规律的更新文章了。国庆期间断了一天,哈啊~


正文从这开始~~

用户行为对浏览器缓存的影响

刷新

点击刷新按钮或者按F5,会触发这种行为。

浏览器直接对本地的缓存文件过期,但是会带上If-Modifed-Since,If-None-Match(如果上一次response带Last-Modified, Etag)这就意味着服务器会对文件检查新鲜度,返回结果可能是304,也有可能是200.


强制刷新

用户按Ctrl+F5(最开始学计算机的时候,还以为7个字母一起按呢,一直没有效果)。

浏览器不仅会对本地文件过期,而且不会带上If-Modifed-Since,If-None-Match,相当于之前从来没有请求过,返回结果是200.


地址栏回车

浏览器发起请求,按照正常流程,本地检查是否过期,然后服务器检查新鲜度,最后返回内容。


点击

和回车的效果是一样的。

网站的缓存类型

缓存用的好,大大减轻服务器压力和提升用户体验。只要涉及到缓存,肯定会存在数据更新不及时的问题。下面分为3个级别来说,越往下,说明上一级的缓存不存在或者已经失效。


第一级,浏览器缓存

优点:

这是最省资源的一种方式,浏览器甚至都不需要发起请求。


缺点:

缓存脱离控制,如果缓存时间设置太长,用户无法访问最新的页面。特别出现一个紧急BUG的时候,需要一段时间,才能平息。


使用:

在header头部添加Expires,Cache-control: max-age, Last-Modified, Etag一个或者多个头部

html代码当中,可以在meta对缓存进行控制。


建议:

JS,CSS,图片可以把缓存时间设置长久一些,永不过期都可以。文件出现变化的时候,通过添加版本号进行更新。

HTML可以根据自己的更新的速度,来设置缓存的有效期时间。


第二级,CDN缓存–静态页面

根据智能DNS解析,用户访问到最近的一台机器,这样就可以减少网络延迟。

用户访问CDN,CDN上如果资源存在并且没有过期,直接返给用户内容,否则需要先访问源站,然后保存到CDN服务器上面,然后返给用户。

优点:

1)请求分散,消弱了高流量下的压力。

2)减少了网络延迟


缺点:

1)节点资源可能缓存不一致,导致不同的用户看到的结果不一样

2)如果设置过期时间短或者其他的不合理的回源策略,会导致大量回源,导致访问速度更慢

3)高并发期间,一个资源,可能同时会有多个回源请求

4)刷新CDN,需要一段时间,如果出现BUG的话,那也得等几分钟


第三级,proxy缓存–动态页面

很多代理服务器都支持了缓存,比如Nginx,Apache。一些动态页面或者接口不怎么更新,比如产品列表等,可以把内容缓存到服务器里面,下次请求的时候,直接读取缓存,动态脚本都不需要执行。动态脚本如果要返回的话,可能需要访问数据库,以及一些其他的服务,这就增加了响应时间。

使用:

nginx,可以配置proxy_cache

apache,配置mod_cache、mod_disk_cache、mod_file_cache及mod_mem_cache


第四级,opcode缓存

是针对php代码。php执行的时候,需要先对php代码解释,生成中间代码,称为opcode,然后再执行。如果缓存住,就可以不需要每一次都解释,这样就可以节省不少资源,增加吞吐量。


优点:

节省资源,增加吞吐量


缺点:

1)代码更新,需要等待opcode失效。如果设置不过期的话,那就需要重启服务器。

2)opcode主要节省了CPU和内存资源,如果时间消耗主要是磁盘或者网络IO,那么作用不是太大。


第五级,文件缓存

会把计算或者从数据库,以及其他服务获得数据,放到一个文件里面,使用的时候取出来。常见的session就是这么做的。我看phpcms就大量使用这种缓存。

缺点:

1)多台服务器,数据缓存内容可能不一致。为了解决这个问题,曾经挂载共享代理,这就导致磁盘IO成为瓶颈。

2)设置过期时间,不太容易。


第六级,分布式缓存

为了解决文件缓存存在的问题,就出现了分布式缓存。常见的有memcache,redis.可以搭建集群,设置过期时间。redis,百度都把它当做数据存储来使用。这种缓存在互联网行业当中,大量应用。

缺点:

需要人维护,消耗大量内存,需要设置过期时间。


后语

页面缓存,早读君就联想到这一年来接触的项目都是有做页面缓存的,每次发布都要清除静态缓存,包括页面。利用这个有个好处就是如果发布有问题,至少有一层缓存可以来做缓冲保护。这种很适合资讯类的,涉及到动态的内容就略显捉襟见拙了。


关于本文

作者:万马奔腾

链接:http://www.woniubi.cn/user_browser_cache/


长按图片识别图中二维码


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存