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 ...
随机推荐
- PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5+phpMyAdmin)和Discuz安装
以下文章参考的3个来源,在加上本人搭建过程中遇到的问题的修复完善笔记: <PHP环境的搭建和Discuz!安装> http://www.myxzy.com/post-386.html ht ...
- python学习笔记(二十九)为什么python的多线程不能利用多核CPU
问题:为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快原因:因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行 ...
- curl基本使用
curl简介 linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载. curl可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协 ...
- LINUX_RHEl6_DHCP服务器配置
安装DHCP服务器 DHCP配置文件 可以使用RHEL 6.0自身携带的RPM包安装,安装结束后DHCP端口监督程序dhcpd配置文件是/etc/dhcp目录中的名为dhcpd.conf的文件.下面手 ...
- Entity Framework 并发处理(转)
什么是并发? 并发分悲观并发和乐观并发. 悲观并发:比如有两个用户A,B,同时登录系统修改一个文档,如果A先进入修改,则系统会把该文档锁住,B就没办法打开了,只有等A修改完,完全退出的时候B才能进入修 ...
- AVAudioFoundation(5):音视频导出
本文转自:AVAudioFoundation(5):音视频导出 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 要读写音视频数 ...
- Python3.x:os.mkdir与 os.makedirs(创建目录方法)区别
Python3.x:os.mkdir与 os.makedirs区别 1,os.mkdir mkdir( path [,mode] ) 说明: 创建一个目录,可以是相对或者绝对路径,mode的默认模式是 ...
- linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
本周作业的主要内容就是采用gcc嵌入汇编的方式调用system call.系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量 ...
- Dekker算法在多核处理器下的失效
Dekker algorithm是一种著名的并发编程的算法,Dekker算法的核心部分是一组对称的代码来访问一组共享变量,使得两个线程不可能同时进入临界区(只要cpu内存模型是遵循顺序一致性的),从而 ...
- linux下查看cpu核心数
1.查看物理CPU个数 cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2.查看每个物理CPU含有的core个数 cat ...