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 ...
随机推荐
- webrtc--stun-turn
.WebRTC后台服务: 通话的房间服务器(Room Server) 房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,我们暂时沿用Google部署在GAE平台 ...
- POJ1236:Network of Schools(tarjan+缩点)?
题目: http://poj.org/problem?id=1236 [题意] N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1 ...
- http之http1.0和http1.1的区别
下面主要从几个不同的方面介绍HTTP/1.0与HTTP/1.1之间的差别,当然,更多的内容是放在解释这种差异背后的机制上. 1 可扩展性 可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定 ...
- ng-深度学习-课程笔记-16: 自然语言处理与词嵌入(Week2)
1 词汇表征(Word representation) 用one-hot表示单词的一个缺点就是它把每个词孤立起来,这使得算法对词语的相关性泛化不强. 可以使用词嵌入(word embedding)来解 ...
- python: 基本的日期与时间转换
需要执行简单的时间转换,比如天到秒,小时到分钟等的转换. 为了执行不同时间单位的转换和计算,请使用datetime 模块.比如,为了表示一个时间段,可以创建一个timedelta 实例,就像下面这样: ...
- U盘安装window系统
U盘安装window系统: 1. 制作系统启动U盘,推荐使用老毛桃. 2. 电脑上插入U盘,启动系统,选择U盘启动. 3. 进入老毛桃选择界面,选择生成PE系统.推荐win8,之前在一个戴尔电脑上使用 ...
- iview使用vue-i18n实现国际化
iview官网中和网上的例子中使用的都是webpack方式,需要import js文件,但是由于项目架构比较简单,没有使用webpack,纯html和js进行交互.所以这里就直接使用js文件引用方式. ...
- 基于std::string的字符串处理
转自:http://zxdflyer.blog.163.com/blog/static/25664262201322510217495/ C++标准模板库std使用广泛.该库中处理字符串的对象为std ...
- c++第十九天
p109~p110: C风格字符串 特点: 1.不方便,不安全,尽量不使用. 2.必须以 '\0'结束.(只有这样才能使用C风格字符串函数) 3.一般利用指针操作这些字符. 4.可以用字符串字面值来初 ...
- pyDay8
内容来自廖雪峰的官方网站. List Comprehensions 1 >>> list(range(1, 3)) [1, 2] 2 >>> L = [] > ...