最近在做项目的时候用到了gzip,发现它的压缩能力还是很强大的,基本能够压缩50%的文本文件大小。以前有所了解,但不够深入,现在详细了解下。

什么是gzip?

根据百度百科的解释:gzip是GNUzip的缩写,它是一个GNU自由软件的文件压缩程序。
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。所以gzip被广泛用在网络传输上,毕竟能够节省传输的时间嘛。gzip算法了解

在哪里使用gzip?

我使用的php的codeigniter框架,在框架中可以通过配置开启gzip压缩。原理是加载zlib扩展,然后调用相关函数进行压缩,参考。这里有一个很明显缺点是,你不能过早地输出一些东西给你的浏览器。什么意思呢,就是你不能在压缩前,就输出内容,一个空格也不行,否则会出现整个页面的空白。比如,你有一个变量忘记设置了,出现了php警告,那么整个页面都显示不出来。这无疑是很不友好的。当然,生产环境很少出现提前输出的问题,但是,万一有问题,整个页面显示不了也太致命了。而且还有别的缺点,比如无法对javascript,css和其他图片文件进行压缩,所以对于web传输来说,使用php不是一个最好的选择。

更好的选择,我觉得是通过web服务器进行压缩。令人高兴的是,各大主流web服务器都提供了 gzip 压缩功能呀。比如说,在 nginx 服务器中,只要在配置文件 nginx.conf 中加上一些gzip的配置,参考, 一个简单的配置即可。注意在 gzip_types 这个配置项加上你需要压缩的文件类型。

我做了对比试验:

  • 压缩前:

  • 压缩后

93.5kb变成30多kb, 差别还是很大的。

gzip对于不同类型文件的压缩率?

我没有自己做试验,参考网上的文章,gzip 对于文本文件的压缩率较高,对于图片的压缩率有限。

gzip的优点和缺点

优点当然很明显了,就是可以减少文件大小,提高传输的速率。 缺点是,压缩的过程会增加服务器的运算量,影响服务器的性能。所以,gzip的压缩级别不能开太高了。这里还有一个优化方案,可以让nginx加载http_gzip_static_module 模块,看名字就知道了,就是自己先生成一个同名的静态的gzip文件,这样就不用每次都压缩了。可以参考

web传输过程中的gzip压缩的更多相关文章

  1. ASP.NET MVC3 Web应用程序中启用GZip压缩示例

    http://www.mzwu.com/article.asp?id=3284 自定义一个筛选器,继承于GZipAttribute: using System;using System.IO.Comp ...

  2. 如何在 apache 中开启 gzip 压缩服务

    服务器设置 gzip 压缩是 web 开发里很普遍的做法.假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文 ...

  3. IIS中启用gzip压缩(网站优化)

    HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的 ...

  4. [学习笔记] Web设计过程中该做和不该做的

    原文网址: http://www.javascriptstyle.com/the-dos-and-donts-of-web-design -该做的: QR代码QR代码即快速响应代码,这是矩阵条形码的一 ...

  5. php curl 中的gzip压缩性能测试

    前因: 请求接口次数很多,每日两亿多次,主要是有些接口返回数据量很大高达110KB(为了减少请求次数,将多个接口合并成一个导致的).后端接口的nginx已经开启gzip,所以做个测试,看看是否在请求时 ...

  6. WEB前端开发中的图片压缩

    web前端开发中,图片的重要性不言而喻,而由于一些图片的大小加上现在国内的网速不给力等种种原因,我们非常有必要对网站使用的图片进行压缩,压缩图片必然会带来图片质量的损失,我们要尽可能的在质量降低很小的 ...

  7. Web CI过程中的Security解决方案

    http://www.infoq.com/cn/articles/WebScan-CI 一. 当前Web应用安全现状 随着中国互联网金融的爆发和繁荣,Web应用在其中扮演的地位也越来越重要,比如Web ...

  8. Apache中的gzip压缩作用及配置

    gzip会对文本资源进行压缩,一般能节省40%的大小,二进制内容不需要开启Gzip压缩,因为这些文件是已经压缩过的,如果再进行gzip压缩可能反而会增加其大小,并且空耗cpu资源啊. 静态资源一般都会 ...

  9. PHP中开启gzip压缩的2种方法

    网页开启gzip压缩以后,其体积可以减小20%~90%,可以节省下大量的带宽,从而减少页面响应时间,提高用户体验. php配置改法: 复制代码代码如下: zlib.output_compression ...

随机推荐

  1. [Windows] 重新安装/卸载桌面版OneDrive / Reinstall/ Uninstall Desktop Version OneDrive

    Deep within the OS is a backup copy of the OneDriver installer. To find it, go to  File Explorer> ...

  2. vue单位文本控件与vue加密文本控件

    vue单位文本控件: 使用方式: npm install dami-text-input --save 使用: <text-input v-model="test" :uni ...

  3. 解决:SSM框架中普通类调用Service的问题 (转)

    http://blog.csdn.net/gwd1154978352/article/details/73480959

  4. HDFS的上传与下载(put & get)

    最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...

  5. gevent模块学习(二)

    2. Queue类,常用用于Greenlet之间的异步共享 q = gevent.queue.Queue(maxsize=None, items=None) -> Queue 说明: 创建一个指 ...

  6. oracle如何创建存储过程和调用

    oracle存储过程的创建语法 create or replace procedure 存储过程名称 ( --定义输入.输出参数-- 参数名1 in 参数类型, 参数名2 in 参数类型, 参数名3 ...

  7. Spring Boot 小技巧

    初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用 Jpa,另外一种是 Spring JDBC .两种方式各有区别下面来详细介绍. 使用 Jpa 在使用s ...

  8. QPS的优化

    cdn加速 吧静态资源放到别人的服务器上 精灵图 后台数据库用mysql+redis sql的优化 用缓存 程序架构:集群化部署 ,分布式+异步     celery:分布式异步任务框架 语言

  9. axios 发送post请求的时候会发送两次

    第一次发送的时候会先发送OPTIONS, 第二次才发送POST, 解决方法: 引用qs模块 安装qs依赖 npm install qs --save 引入qs依赖 import qs from 'qs ...

  10. java AQS(AbstractQueuedSynchronizer)同步器详解

    除了内置锁(synchronized)外,java AQS(AbstractQueuedSynchronizer)同步器几乎是所有同步容器,同步工具类的基础.ReentrantLock.Reentra ...