页面缓存优化

页面缓存优化

在做网站时,对页面进行缓存优化,可以有效提高网页的响应速度,提高用户体验这里我来总结一下一些使用的缓存技巧。主要分为服务端缓存以及客户端缓存。

服务器端缓存

分为页面缓存、URL缓存、对象缓存

  • 页面缓存
    当访问页面时候,如果是第一次访问,可以将网页数据取出并存储在redis缓存中,当用户下一次访问的时候直接从缓存中获取就可以,不需要再访问底层数据库了。
    比如商品列表相关的页面,如果没有缓存,每次访问都需要通过底层数据库获取商品列表,这样效率就很低,而如果将对于数据及页面都缓存起来,在一定时间内访问都可以在redis中进行访问,极大减少了底层数据库访问量,对高并发场景有显著的效果。
    缺点:不适合在那种对时间准确度比较高的场景,因为缓存是会出现不一致情况的,比如是一个倒计时抢购的场景,如果将抢购页面缓存起来,当第一个用户访问后将页面缓存起来,而在缓存未过期的时间内如果其他用户也访问了,所获取的时间仍然是第一次访问的时间,导致不同步现象,使得用户错过最佳抢购时间。同时还要注意缓存时间的控制

  • url缓存
    和页面缓存原理基本一样,一般是描述对多个选项每一个详情页面的缓存。如商品列表中的详情按钮所对应的页面链接。
    缺点:同页面缓存一样需要注意时间。

  • 对象缓存
    相对于页面缓存,是粒度更小的一种缓存方法。
    比如用户登陆时,第一次登陆会从底层数据库中查找对应用户的信息并缓存起来,当用户再次登陆或者是有关于需要到用户信息的操作的时候都可以通过缓存获取,减少底层数据库压力。
    缺点:在缓存数据与更新数据库操作上要特别注意!当要对底层数据进行更新的时候,要先更新数据库的数据,然后在使缓存失效(不要重新设置缓存),这个操作顺序是不能变的,防止读取到脏数据。而且需要在一整个事务中进行。详细介绍链接

客户端缓存

页面静态化、强缓存、协商缓存

  • 页面静态化
    通过将前后端数据分离,用户访问网页时获取静态页面,然后通过向服务器获取动态数据,而不用全部资源都向服务器获取,减少服务端压力以及提高渲染速度。
    可以通过直接从客户端缓存好的静态页面用ajax来从后端提取数据填充到页面对于标签属性中,而不是通过model.addAttribute()将数据拿给前端页面后由服务器一并将静态页面和动态数据发送给客户端。减少了静态页面的传输消耗。
    注意:使用ajax时,GET和POST不能互相替代,GET并不会对服务器数据进行修改,而POST一般是会对服务器数据进行修改,且POST安全性较高。
  • 强缓存
    强缓存是一种客户端缓存技术,他是通过http协议中的两个头子段来实现的:expire、cache-control
    expire:通过保存有效时间来判断缓存是否过期,不过服务端与客户端时间可能不一致导致判断错误。
    cache-control:以秒作为单位来表示缓存的有效时长,优先级比expire高。
    特点:不用想服务端发送请求,直接在本地判断后进行缓存。这也是和协商缓存的主要区别。

springboot的配置实现:

#static
spring.resources.add-mappings=true
spring.resources.cache-period= 3600
spring.resources.chain.cache=true 
spring.resources.chain.enabled=true
spring.resources.chain.gzipped=true
spring.resources.chain.html-application-cache=true
spring.resources.static-locations=classpath:/static/
  • 协商缓存
    协商缓存与强缓存不同的时会想服务端发送请求有服务端判断缓存数据是否过期,如果没过期就直接返回由客户端提取本地缓存,如果过期了就会将对应新的数据发送给客户端。是通过Etag和last-modified实现的。
    1、客户端请求时发送If-None-Match,服务端判断是否与Etag相同,如果相同则代表资源没有被修改,不相同则发送新资源及Etag。(Etag在集群环境下要注意
    2、客户端请求时发送If-Modified-Since,服务端判断该字段时间是否与last-modified相同,判断数据是否过期。(精确度为秒,有些资源更新频率有时会小于一秒)
    如果协商缓存成功,则会返回304状态码(服务端已经执行了GET,但文件未变化)。

关于这几个字段的详细介绍:
https://blog.csdn.net/erix1991/article/details/76551943

总结:
缓存是可以提高性能的有效且直接的方法,不过在设置缓存是要注意缓存过期、缓存更新等的一些细节,否则会导致读取到过期数据等情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值