gzip压缩初探
前言
我们平时工作中传文件时为了提高传输速度一般都会把文件压缩一下再传,那样速度回快一些,尤其是那些文件很多的文件夹,比较常用的压缩格式就是zip,rar了。那我们日常网页中利用http协议请求的那些资源可不可以压缩呢,当然是可以了,这就要说到我们今天的主角gzip了。
gzip之前我并没有在项目中用过,就每每查阅文档时听说某一个框架文件经gzip压缩之后就变得多小多小了,甚是好奇,所以今天特意查了一下。
gzip压缩的好处
好处当然是很明显的啦,就是可以大大减小传输文件的大小,提高页面加载速度、节省带宽。而且压缩的比率是可以调节的,我们常用的服务器端压缩是3到10倍,一个本来100k的文件能压缩到20k左右,想想都美滋滋,今天看了我们公司的官网用了gzip才发现压缩与不压缩差别还是蛮大的,哈哈。当然并不是所有的文件都能压缩这么多,像我们常用的CSS,JS文件是可以压缩很多的,而图片那些文件本来就压缩过了就没有多少可以压缩了。
gzip压缩的过程
gzip是一种流行的文件压缩算法,他会把文件压缩为.gz然后传给浏览器,最后浏览器负责解压文件呈现给客户。所以,要想实现文件的gzip压缩与解压,服务端和浏览器端都得支持。他们的通信过程大体如下:
- 首先我们要将http请求的请求头中的accept-encoding属性设为gzip、deflate,表明浏览器支持gzip压缩方式
- web服务器收到浏览器的请求之后,会判断浏览器是否支持gzip压缩,如果支持就传输压缩后的响应内容,如果不支持就传输未压缩的内容。当然,服务器会对压缩文件进行缓存,并不是每次请求都要再压缩一次
- 浏览器接收到内容后判断文件是否被压缩,如果压缩了就先解压再解析(IE5.5以上才支持gzip)
谁来压缩
答案就两个,不是服务端就是客户端。
上面已经讲到了以前常用的一种方式是服务端压缩,浏览器解压。其实我们开发端可是可以压缩的,比如我们日常用的打包软件webpack就有compression-webpack-plugin这么个插件专门做压缩的,大概用法如下:
const CompressionWebpackPlugin = require('compression-webpack-plugin');
plugins: [
new CompressionPlugin({
test: /\.js/, //满足正则表达式的会被压缩
filename: '[path].gz[query]', //目标文件名
algorithm: 'gzip', //使用gzip压缩
threshold: 10240, //资源文件大于10240b=10k时会被压缩
})
]
既然已经存在了服务端响应请求时压缩,为什么还会存在应用构建时压缩这种方式呢?
存在并且被很多人使用就一定有它存在的价值,带着这份疑问我查询资料得知:gzip压缩文件是分等级的,共十级。等级越高压缩效果越好可也以为着更耗时嘛。如果你在服务端相应请求时压缩,那我请求一个文件不还是得等好久?而且即便是有了缓存,服务端压缩时还是有时间开销的。
但是构建时压缩就不存在上面这些问题了,我们现在的很多项目都是spa的项目,即使不是也是需要构建工具打包什么的,那我们在这个过程中就最大限度地使用gzip压缩代码,让服务器直接使用不是很好吗,反正我们也不会天天打包生产版本的,哈哈。
当然,这样服务端也得相应地更改配置来读取我们的压缩文件,会要麻烦一些,所以最终使用哪种压缩方式还得根据具有的哑无需求来,但是使用gzip压缩是很有必要的,毕竟效果是摆在那里的。
总结
在之前的一个vue单页面应用中我就遇到过打包之后文件还是太大的问题,当时经过各种分拆和异步组件之后首屏文件还是有一点大,我当时也想到了gzip,可当时的后台忽悠我说很麻烦,可我今天查了一下服务端压缩的话他们也不要加多少配置。所以啊,作为一个前端攻城狮服务端的知识多了解一下还是有必要的,可以防忽悠嘛,哈哈...
今天用uglifyjs-webpack-plugin这个插件配置代码压缩信息时才想起我们这个项目貌似木有使用gzip,于是乎从头了解了一下,所以记录一下。以后要多多利用起来!
参考
gzip压缩初探的更多相关文章
- ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩
网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...
- GZIP压缩优化
使用gzip优化web应用(filter实现) 相关知识: gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户 ...
- IIS7配置Gzip压缩 JS压强失败的原因
开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在容易了许多,而且默认情况下就是启用GZip压缩的.如果没有,则可以再功能视图下找到“压缩”项,进入之后就会看到“静态内 ...
- Nginx 开启gzip 压缩
随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术. 经过gz ...
- gzip压缩及测试方法【转载】
Nginx开启Gzip压缩大幅提高页面加载速度 http://www.veryhuo.com/a/view/51706.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文 ...
- IIS7.5打开GZip压缩,同时启用GZip压缩JS/CSS文件的设置方法[bubuko.com]
IIS7.5或者IIS7.0开启GZip压缩方法:打开IIS,在右侧点击某个网站,在功能视图中的“IIS”区域,双击进入“压缩”,如图下图: 分别勾选“启用动态内容压缩”和“启用静态内容压缩”.这样最 ...
- Nginx -- Gzip 压缩功能作用
1.对应的压缩参数说明# 开启gzip压缩功能gzip on; # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取.默认值是0,不管页面多大都进行压缩,建 ...
- IIS7 启用GZip压缩
GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加,无论是CSS合并.JS合并.图片合并都不如GZip压缩来得简单直接.如果一个网页是100K,那么启用GZip ...
- 【转载】HttpWebRequest开启gzip压缩简介
在用HttpWebRequest对象时,一般我们都没有开启gzip压缩,如果服务端返回的数据比较大,这是我们需要开启gzip压缩,怎么开启呢? 1.给HttpWebRequest对象,添加如下Head ...
随机推荐
- vue.js(一)
之前看过一点vue.js但是知识点没做记录,现在也差不多不记得了,今天把以前看过的翻一遍,顺便提炼一下知识点 注意:下面的所有与vue相关的标签.指令都是写在id="app"的di ...
- linux 的nohup & 和daemon 总结(转)
add by zhj:守护进程貌似跟nohup + &方式启动的进程差不多.都可以实现与终端的无关联. 原文:http://blog.csdn.net/lovemdx/article/de ...
- uchome 不从缓存中读取模板
/source/function_common.php中的代码 //模板调用 function template($name) { global $_SCONFIG, $_SGLOBAL; if($_ ...
- spark mllib和ml类里面的区别
mllib是老的api,里面的模型都是基于RDD的,模型使用的时候api也是有变化的(model这里是naiveBayes), (1:在模型训练的时候是naiveBayes.run(data: RDD ...
- Kafka丢失数据问题优化总结
数据丢失是一件非常严重的事情事,针对数据丢失的问题我们需要有明确的思路来确定问题所在,针对这段时间的总结,我个人面对kafka 数据丢失问题的解决思路如下: 是否真正的存在数据丢失问题,比如有很多时候 ...
- CentOS7.5基础优化与常用配置
目录 最小化全新安装CentOS7基础优化 配置yum源 安装常用软件 关闭防火墙 关闭SELinux 优化ulimit 历史命令记录改为1万条 把命令提示符改为绿色 添加vim配置文件 添加一个普通 ...
- mysql++使用
Mysql++是官方发布的.一个为MySQL设计的C++语言的API.Mysql++为Mysql的C-Api的再次封装,它用STL(Standard Template Language)开发并编写,并 ...
- 后台管理系统-使用AdminLTE搭建前端
返回总目录<ABP项目实战-后台管理系统-目录> 安装AdminLte 我们通过Nuget包管理器安装AdminLte 引用三方组件 因为AdminLte使用到了很多三方的组件,所以我们需 ...
- C++中的常量定义
本篇笔记总结自一次代码检视. 一般来说,使用C语言编程时我们都习惯在代码当中使用C当中的宏定义来定义一个数值常量: #define MY_CONST 7 在C++开发项目时,也会经常存在沿袭C当中常量 ...
- 使用Github发布自己的网站
1.编写好自己的index.html 2.在github上新建一个分支,分支名需要按xxx.github.com(xxx为github账号名): 3.进入分支的setting界面,自动生成网页,会在分 ...