实际项目中经常听开发说,你清一下缓存就好了balabala,但这里说的缓存跟我记忆中的缓存好像不是一个东西。这周末大概查了一下,嗯果然不是一个东西~
很多开发者习惯把包括cookie、webstorage以及indexedDB存储的数据都称为缓存,实际这是一种很不严谨的说法。cookie用于服务端区别客户端,而后两者更多用于保存具体的数据和存储大量结构化数据上面。
真正意义上的缓存只有一种:就是请求资源的副本。通俗点说就是从服务器上拿到的资源自己本地做一个备份,下次再用的话直接使用备份就好啦,不用重新再去服务器拿一遍。但并不是每一个资源客户端都会保存一份副本,而是根据协议来处理这些缓存,开发者可以根据这份协议来控制缓存的建立和删除。这份协议就是可爱的http~~它里面定义了很多关于缓存的请求和响应字段(此文中只会大概提一下,不会详细说明。因为概念什么的太多了一下子也记不住,用到什么记什么这样效率最高了QAQ~)
那么,缓存的意义是啥嘞?就是当用户点击返回按钮或者再次去访问某个页面的时候,能够更快地相应。尤其是在
1.缓解服务器压力(服务器去响应每次客户端的请求)
2.提升性能(打开本地资源速度比去服务器请求一下再回来要快得多吧~~)
3.减少带宽消耗。(带宽是啥自行百度。。。)
缓存可以分为三类:
1.浏览器缓存
2.代理服务器缓存
原理和浏览器类似,但是规模要大很多,因为代理服务器是为成千上万的用户提供缓存机制,所以在减少响应时间和带宽使用方面很有效;因为同一个缓存可能会被重用多次。
由于缓存服务器不是客户端或者源服务器的一部分,它们存在于网络中,请求路由必须经过它们才会生效,所以实际上可以手动设置浏览器的代理,或者通过一个中间服务器进行转发,这样用户就察觉不到代理服务器的存在了~
3.网关缓存
也成为代理缓存或反向代理缓存。网关也是一个中间服务器,但一般是网站管理员自己部署,从而让网站拥有更好的性能。
4.数据库缓存
如果应用很复杂,那相应的数据库中的表也很繁杂,使用应用的时候就会频繁的进行数据库查询操作,这样可能会导致数据库不堪重负。一个好的办法就是将查询后的数据放到内存中,下一次查询直接从内存中取。
关于浏览器的缓存策略,详见https://juejin.im/post/5a6c87c46fb9a01ca560b4d7