前言

我们平时工作中传文件时为了提高传输速度一般都会把文件压缩一下再传,那样速度回快一些,尤其是那些文件很多的文件夹,比较常用的压缩格式就是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压缩初探的更多相关文章

  1. ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩

    网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...

  2. GZIP压缩优化

    使用gzip优化web应用(filter实现) 相关知识: gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户 ...

  3. IIS7配置Gzip压缩 JS压强失败的原因

    开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在容易了许多,而且默认情况下就是启用GZip压缩的.如果没有,则可以再功能视图下找到“压缩”项,进入之后就会看到“静态内 ...

  4. Nginx 开启gzip 压缩

    随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术. 经过gz ...

  5. gzip压缩及测试方法【转载】

    Nginx开启Gzip压缩大幅提高页面加载速度 http://www.veryhuo.com/a/view/51706.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文 ...

  6. IIS7.5打开GZip压缩,同时启用GZip压缩JS/CSS文件的设置方法[bubuko.com]

    IIS7.5或者IIS7.0开启GZip压缩方法:打开IIS,在右侧点击某个网站,在功能视图中的“IIS”区域,双击进入“压缩”,如图下图: 分别勾选“启用动态内容压缩”和“启用静态内容压缩”.这样最 ...

  7. Nginx -- Gzip 压缩功能作用

    1.对应的压缩参数说明# 开启gzip压缩功能gzip on; # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取.默认值是0,不管页面多大都进行压缩,建 ...

  8. IIS7 启用GZip压缩

    GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加,无论是CSS合并.JS合并.图片合并都不如GZip压缩来得简单直接.如果一个网页是100K,那么启用GZip ...

  9. 【转载】HttpWebRequest开启gzip压缩简介

    在用HttpWebRequest对象时,一般我们都没有开启gzip压缩,如果服务端返回的数据比较大,这是我们需要开启gzip压缩,怎么开启呢? 1.给HttpWebRequest对象,添加如下Head ...

随机推荐

  1. android进入页面会定位到ListView问题解决方法

    在我们的页面中如果存在有ListView,当我们进入这个activity时,页面会定位到ListView的位置去,而不是activity的头部,这是由于ListView会去默认获取焦点所造成的. 解决 ...

  2. 从LayoutInflater分析XML布局解析成View的树形结构的过程

    上一篇博客分析了XML布局怎么载入到Activity上.不了解的能够參考 从setContentView方法分析Android载入布局流程 上一篇博客仅仅是分析了怎么讲XML布局加入到 Activit ...

  3. 【Python】如何取到input中的value值?

    练习:取到下方链接下所有海贼王的下载链接. # coding=utf-8 from selenium import webdriver from time import sleep import ke ...

  4. PHP指定概率算法

    转载来源链接: https://blog.csdn.net/sinat_35861727/article/details/54980807 PHP指定概率算法,可用于刮刮卡,大转盘等抽奖算法. 假设: ...

  5. Spark提交应用程序之Spark-Submit分析

    1.提交应用程序 在提交应用程序的时候,用到 spark-submit 脚本.我们来看下这个脚本: if [ -z "${SPARK_HOME}" ]; then export S ...

  6. 跟我学Makefile(五)

    文件名操作函数 每个函数的参数字符串都会被当做一个或是一系列的文件名来对待. $(dir <names...>) 名称:取目录函数——dir. 功能:从文件名序列<names> ...

  7. CentOS7.0安装Nginx 1.10.0

    首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib-devel ...

  8. SpringData_JpaSpecificationExecutor接口

    不属于Repository体系,实现一组 JPA Criteria 查询相关的方法 Specification:封装 JPA Criteria 查询条件.通常使用匿名内部类的方式来创建该接口的对象 / ...

  9. 画柱状图Java

    样例输入:THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.THIS IS AN EXAMPLE TO TEST FOR YOURHISTOGRAM PROGR ...

  10. Webwork 学习笔记

    1. 首先配置一个简单的webwork应用 核心jar: commons-logging.jarognl.jaroscore.jarvelocity-dep.jarwebwork-2.1.7.jarx ...