美文网首页
face 32 浏览器缓存和压缩优化技术

face 32 浏览器缓存和压缩优化技术

作者: 谢凌 | 来源:发表于2018-11-12 17:12 被阅读0次

浏览器缓存和压缩优化技术

启用浏览器缓存

http缓存模型中,如果请求成功会有三种情况

200 from cache:直接从本地缓存中获取响应,最快速最省流量 因为根本没有向服务器发送请求

304not modified:协商缓存,浏览器在本地没有命中的情况下请求头中发送一定的校验数据到服务端,如果服务端数据没有改变浏览器从本地缓存响应,返回304

当浏览器没有命中本地缓存 如本地缓存过期或者响应中声明不允许直接使用本地缓存 那么浏览器可定会发起服务端请求

服务端会验证数据是否修改,如果没有通知浏览器使用本地缓存

快速,发送的数据很少,只返回一些基本的响应头信息,数据量很小,不发送实际响应体

200 ok  以上两种缓存全部失败,服务器返回完整响应。没有用到缓存 相对最慢

本地缓存 如果浏览器认为本地缓存可以使用 不会请求服务端  最快

相关header

pragma:http1.0时代的遗留产物,该字段被设置为no-cache时,会告知浏览器禁用本地缓存,即每次都向服务器发送请求

expires:http1.0时代用来启用本地缓存的字段,expires值对应一个 如 Thu ,31Dec 2037  23:55:55GMT的格林威治时间 告诉浏览器你去缓存实现的时刻,如果还没到该时刻 标明缓存有效 无需发送请求

缺陷:浏览器与服务器时间无法保持一致,如果时间差距大 就会影响缓存结果

cache-control:http1.1针对expires时间不一致的解决方案,运用cache-control告知浏览器缓存过期的时间间隔而不是时刻,即使具体时间不一致也不影响缓存的管理===秒数过期

no-store:禁止浏览器缓存响应

no-cache:不允许直接使用本地 缓存,先发起请求和服务器协商

max-age=delta-seconds:告知浏览器该响应本地缓存有效的最长期限,以秒为单位

优先级

pragma>cache-control>expires

Last-Modified 通知浏览器资源的最后修改时间 格林威治时间

if-modified-since  得到资源的最后修改时间后,会将这个信息通过 if-modified-since提交到服务器做检查 如果没有修改 返回304状态码

etag http1.1推出  文件指纹标识符 如果文件内容修改 指纹会改变

if-none-match  本地缓存失效 会携带此值去请求服务端,服务端判断该资源是否改变 如果没有改变 直接使用本地缓存 返回 304

http缓存机制

nginx配置缓存策略

适合缓存的内容

不变的图像 如 logo图标等

js、css静态文件

可下载的内容 媒体文件

建议使用协商缓存

html文件

经常替换的图片

经常修改 的 js  css文件

js、css文件的加载可以加入文件的签名来拒绝缓存  index.css?签名

不建议缓存

用户隐私等敏感数据

经常改变的api数据接口

nginx缓存策略的实现

$since=$_SERVER['HTTP_IF_MODIFIED_SINCE'];

$lifetime=3600;

if(strtotime($since)+$lifetime>time())

{

    header('HTTP/1.1 304 Not Modified');

    exit;

}

header('Last-Modified: '.gmdate('D, d M  Y H:i:s',time()).' GMT');

本地缓存配置

add_header指令 添加状态码 为2xx和3xx的响应头信息

add_header name value[always];

可以设置pragma cache-control expires 可以继承

expires 30d  三十天

expires指令:通知浏览器过期时长

expires time;

为负值表示cache-control:no-cache

为正值表示cache-control:max-age=指定的时间:

前端代码和资源的压缩

优势

让资源文件更小 加快文件在网络中的传输,让网页更快的展现,降低带宽和流量开销

压缩方式

js  css 图片 html代码的压缩

Gzip压缩

javascript代码压缩

javascript代码压缩的原理一般是去掉多余的空格和回车,替换长变量名,简化一些代码写法等

javascript代码压缩工具有很多,有在线工具 有应用程序 有编辑器插件

常用压缩工具  :

uglifyjs 压缩 语法检查 美化代码 代码缩减 转化

  yui compresscor  来自yahoo 只有压缩功能

closure  compiler 来自 google 功能类似 uglifyjs,压缩的方式不一样

css代码压缩

原理跟javascript压缩原理类似 同样是去除空白符,注释并且优化一些css语义规则等

常用压缩工具  :

  yui compresscor

css compresscor 压缩时可以选择模式

html代码压缩

不建议html代码压缩 容易破坏结构  可以使用  Gzip压缩  也可以使用html compresscor 工具,不过转换后一定要检查代码结构

html compresscor

图片压缩

除了代码的压缩外 有时对图片的压缩也是很有必要 一般情况下图片在web系统的比重都比较大

压缩工具

tinypng

jpegmini

imageoptim

Gzip压缩

nginx配置

gzip on|off;#是否开启 gzip

gzip_buffers 32 4K|16 8K #缓冲 (在内存中缓冲几块 ,每块多大)

gzip_comp_level[1-9] #推荐6 压缩级别 (级别越高 ,压的越小 越浪费CPU计算资源)

gzip_disable #正则匹配UA什么样的uri不进行gzip

gzip_min_length 200 #开始压缩的最小长度

gzip_http_version  1.0|1.1# 开始压缩的http协议版本

gzip_proxied #设置请求者代理服务器 该如何缓存内容

gzip_types text/plain  application/xml #对那些类型的文件用压缩 如 txt,xml,html,css

gzip_vary on|off #是否传输 gzip压缩标志

其他工具

自动化构建工具 grunt

相关文章

  • face 32 浏览器缓存和压缩优化技术

    浏览器缓存和压缩优化技术 启用浏览器缓存 http缓存模型中,如果请求成功会有三种情况 200 from cach...

  • 浏览器缓存和压缩优化技术

    一、HTTP缓存机制 高并发下只能通过提升服务器负载解决?缓存只能做数据库缓存?启用浏览器缓存 缓存分类:HTTP...

  • js基础常见问题总结(三)~

    web前端性能优化总结 浏览器访问优化 1、减少http请求,合理设置 HTTP缓存2、使用浏览器缓存3、启用压缩...

  • 性能优化

    性能优化方法: 减少http请求,合理浏览器缓存 资源压缩合并;启用压缩:HTML、CSS、javascript文...

  • 浏览器缓存?优点?清除方法?

    ☆前端优化:浏览器缓存技术介绍 - 简书 浏览器缓存(适用于前端解决缓存问题) - 简书 js清除浏览器缓存问题的...

  • PHP高并发解决方案

    高并发解决方案案例 1、流量优化:防盗链处理2、前端优化:减少HTTP请求,启用浏览器缓存和文件压缩,cdn加速,...

  • 大型网站核心架构要素

    大型网站核心架构要素 性能 可用性 伸缩性 扩展性 安全性 性能 浏览器端:浏览器缓存,页面压缩,优化页面布局,减...

  • 高并发-浏览器缓存和压缩优化

    HTTP缓存机制 启用浏览器缓存 缓存分类 HTTP缓存模型中,如果请求成功会有三种情况1.200 from ca...

  • web 前端缓存

    标签: 缓存优化 浏览器缓存策略 在此输入正文

  • 浏览器缓存

    参考文章链接 : 前端优化:浏览器缓存技术介绍 - 掘金 浅谈http中的Cache-Control_小小郭-...

网友评论

      本文标题:face 32 浏览器缓存和压缩优化技术

      本文链接:https://www.haomeiwen.com/subject/tpvcfqtx.html