当前位置: 首页 > 后端技术 > PHP

前端性能优化--cache

时间:2023-03-30 00:37:33 PHP

Cache-ControlCache-Control:缓存控制max-ages-maxageprivatepublicno-cacheno-storemax-age设置缓存存储的最大期限,超过该期限则认为缓存过期(以秒为单位)。与Expires相反,时间是相对于请求的时间,比Expires-maxage优先级高于max-age或Expiresheaders,但只适用于共享缓存(如各种代理),private中被忽略caches并且只能public使用,如果CDN优先级高于max-age]private表示响应只能被单个用户缓存,不能作为共享缓存使用(即代理服务器不能缓存it),并且响应内容可以被自己的服务器缓存public表示响应可以被任何对象(包括:发送请求的客户端,代理服务器等)缓存。CDN,可以被多个用户请求no-cache强制缓存在释放缓存副本之前将请求提交给原始服务器进行验证在缓存策略中no-store缓存不应存储任何有关客户端请求或服务器响应的信息。不会使用任何缓存策略Expires缓存过期时间,用于指定资源的过期时间,是服务器端的具体时间点告诉浏览器在过期时间之前浏览器可以直接从浏览器缓存中取数据,不用再次请求max-age的优化级别高于expires。当有max-age时,expires会被忽略。如果服务器端的文件在有效时间内发生了变化,但浏览器端无法感知Last-Modified/If-Modified-SinceLast-Modified是一个响应头,包含源站认为资源被修改的日期和时间.它通常用作验证器,以确定接收或存储的资源是否相互一致。这是一种回退机制,因为它不如ETag精确。包含If-Modified-Since或If-Unmodified-Since标头的条件请求使用此字段。基于client和server协商的缓存机制Last-Modified----responseheaderIf-Modified-Since----requestheader需要和cache-control一起使用。max-age的优先级高于Last-Modified缺点:有些服务器无法获取准确的修改时间。文件修改时间变了,但是文件内容没有变。第一次请求检查禁用缓存,状态码为200,响应头返回Last-Modified。取消勾选disablecacherefresh,状态码304,请求头中有If-Modified-Since,因为客户端发送的Modified和服务端的Modified相同,所以缓存的Etag/If-None-MatchETagHTTP响应头是资源特定版本的标识符。这使得缓存更有效并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。并且如果内容发生变化,使用ETag有助于防止资源在更新文件内容的哈希值的同时相互更新(“空中碰撞”)etag--responseheaderif-none-match--requestheader应该一起使用withcache-control的作用是第一次请求清除缓存,服务器返回etag再次使用缓存请求。客户端向服务端发送if-none-match因为两个值相同,所以返回304,让浏览器读取本地资源分类缓存策略过程图