#一、gzip压缩技术
gzip(GNU- ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的大多数浏览器都支持解析gzip压缩过的资源文件。在实际的应用中我们发现压缩的比率往往在3到10倍,也就是本来50k大小的页面,采用压缩后实际传输的内容大小只有5至15k大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。
实现gzip压缩的方式有多种,比如:nginx、tomcat、java等,选用其中一种即可。
#二、nginx启用gzip
Nginx的压缩输出有一组gzip压缩指令来实现。相关指令位于http{….}两个大括号之间,如下:

  #打开gzip压缩gzip on;#不压缩临界值,大于1K的才压缩,一般不用改gzip_min_length 1k;#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流,这里设置以16k为单位的4倍申请内存gzip_buffers 4 16k;#默认为http 1.1,现在99.99%的浏览器基本上都支持gzip解压了,所有无需设置此项#gzip_http_version 1.0;#gzip压缩比,1 最小处理速度最快,9 最大但处理最慢(传输快但比较消耗cpu)gzip_comp_level 2;#要压缩的文件类型,注意"text/html"类型无论是否指定总是会被压缩的gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php image/jpeg image/gif image/png;#on的话会在Header里增加"Vary: Accept-Encoding",给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩#我这里的浏览器肯定支持gzip压缩,所以就不开启此功能了gzip_vary off;#IE6对Gzip不怎么友好,不给它Gzip压缩了gzip_disable "MSIE [1-6]\.";

#三、tomcat启用gzip
目前大多数主流WEB中间件都支持GZIP压缩、下面以Tomcat 为例进行说明:
找到Tomcat 目录下的conf下的server.xml,并找到如下信息:

      <Connector port = "8080" maxHttpHeaderSize = "8192" maxThreads = "150" minSpareThreads = "25"maxSpareThreads = "75" enableLookups = "false" redirectPort = "8443" acceptCount = "100"connectionTimeout = "20000" disableUploadTimeout = "true"将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。):<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25"maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true"compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"compressableMimeType="text/html,text/xml" >这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要将compressableMimeType=”text/html,text/xml”加入css和js:<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >

一般文本类型的静态文件可以通过这种方式压缩后传输、提高传输效率。
#四、java服务器启用gzip
java本身可以通过过滤器filter实现gzip压缩。下面提供一个gzip工具类:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;public class GZIPUtils  {public static final String GZIP_ENCODE_UTF_8 = "UTF-8"; public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1";public static byte[] compress(String str, String encoding) {if (str == null || str.length() == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip;try {gzip = new GZIPOutputStream(out);gzip.write(str.getBytes(encoding));gzip.close();} catch ( Exception e) {e.printStackTrace();}return out.toByteArray();}public static byte[] compress(String str) throws IOException {  return compress(str, GZIP_ENCODE_UTF_8);  }public static byte[] uncompress(byte[] bytes) {if (bytes == null || bytes.length == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(bytes);try {GZIPInputStream ungzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = ungzip.read(buffer)) >= 0) {out.write(buffer, 0, n);}} catch (Exception e) {e.printStackTrace();}return out.toByteArray();}public static String uncompressToString(byte[] bytes, String encoding) {  if (bytes == null || bytes.length == 0) {  return null;  }  ByteArrayOutputStream out = new ByteArrayOutputStream();  ByteArrayInputStream in = new ByteArrayInputStream(bytes);  try {GZIPInputStream ungzip = new GZIPInputStream(in);  byte[] buffer = new byte[256];  int n;  while ((n = ungzip.read(buffer)) >= 0) {  out.write(buffer, 0, n);  }  return out.toString(encoding);} catch (Exception e) {e.printStackTrace();}return null;}public static String uncompressToString(byte[] bytes) {  return uncompressToString(bytes, GZIP_ENCODE_UTF_8);  } public static void main(String[] args) throws IOException {String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";System.out.println("字符串长度:"+s.length());System.out.println("压缩后::"+compress(s).length);System.out.println("解压后:"+uncompress(compress(s)).length);System.out.println("解压字符串后::"+uncompressToString(compress(s)).length());}
}

#五、压缩效果
压缩前:

压缩后:


显然压缩后资源文件变得小了很多,加载速度也快了不少。可见,gzip压缩是页面性能优化的一种有效方式。

web性能优化--用gzip压缩资源文件相关推荐

  1. Nginx性能优化功能- Gzip压缩(大幅度提高页面加载速度)

    Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能!  Web网站上的图片,视频等其它多媒体文件以及大文件,因 ...

  2. 前端性能优化之gzip压缩(压缩js、css、HTML,千万不能压缩图片!)

    gzip主要用来压缩html,css,javascript等静态文本文件,gzip 压缩的比率通常在3~10 倍之间,压缩后的体积能达到只有原本的30%左右,这样就能大大节省服务器的网络带宽和大大提升 ...

  3. web性能优化以及SEO

    web性能优化 1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数 ...

  4. web性能优化及seo

    web性能优化 为什么要做性能优化? 提高用户体验,加速页面的相应速度 提高用户交互性,操作体验更好 为搜索引擎服务 常用的技术 css精灵图片 压缩图片大小 合并css js文件 减少http请求的 ...

  5. css优化,js优化以及web性能优化

    Css优化总结 对于css的优化可以从网络性能和css语法优化两方面来考虑. Css性能优化方法如下: 1.css压缩 Css 压缩虽然不是高端的知识,但是很有用.其原理也很简单,就是把我们css代码 ...

  6. Java Web性能优化

    Java Web性能优化 转载:http://hi.baidu.com/jiaqiang_22/item/c13dc2ac7d360a3c020a4d76 你时常被客户抱怨JSP页面响应速度很慢吗?你 ...

  7. 前端性能优化:3.图像资源优化

    一条高效传递信息的原则:字不如表,表不如图. 图像资源优化的根本思想:压缩.无论选取何种图像的文件格式,还是针对同一种格式压缩至更小的尺寸,其本质都是用更小的资源开销来完成图像的传输和展示. 3.1 ...

  8. 前端小白浅谈seo优化以及web性能优化方案

    写在前面 这是好久之前的工作了,之前还没用vue spa 做项目的时候,都是用的原生js写项目,纯html,css,js写项目,真的是每个页面引用css,js各种文件写到头痛, 那个时候做一个大型网站 ...

  9. 前端开发:Web性能优化有哪些方法?

    Web性能优化,主要分为前端和后台两个部分性能优化,后台性能优化决定了Web能不能用,前端优化决定了其好不好用,也就是牵涉到前端用户体验和Web易用性等情况,所以前端性能与用户体验是有着极大的关联的. ...

最新文章

  1. cad菜单栏快捷键_拒绝效率低下,教你瞬间提升10倍!老师傅珍藏多年CAD快捷键...
  2. code Gym 100500D T-shirts(暴力)
  3. android 桌面循环滚动字幕,循环滚动字幕
  4. 编写批处理文件-------基础
  5. android 自定义库,Android自定义Log库
  6. android 按钮控制线程,关于手机安卓-线程测试
  7. CentOs基础操作指令(时间日期、搜索查找)
  8. Java基础02 位运算符<<、>>
  9. 在opensuse tumbleweed 上开发51单片机
  10. 欧姆龙PLC程序 欧姆龙NX系列PLC程序,ST语言和梯形图配合使用,数据处理使用ST语言,逻辑用梯形图
  11. 视频图像传输与显示(2)——彩色模拟电视广播制式NTSC、PAL和SECAM
  12. Mini MP3 Player播放器简介与STC12例程
  13. 初学python:输入某年某月某日,判断这一天是这一年的第几天
  14. 2020总结 2021规划
  15. Linux:配置本地yum源仓库
  16. Python几种开发工具介绍
  17. 高级项目管理师论文写作要点参考
  18. 根据百度地图经纬度获取位置信息
  19. My97DatePicker时间控件使用
  20. struct ethtool_ops详解

热门文章

  1. 戴尔服务器r730系统,戴尔R730服务器安装Win8.1操作系统 | 小迪的生产力工具室
  2. 四阶行列式直接展开_4行列式按行(列)展开课程.ppt
  3. 水体悬浮颗粒物含量的测定
  4. 6.5K闭循环低温恒温设备的特点及技术参数
  5. 计算机网络Part2
  6. 2022-8-1----Android10.0(MTK)-----修改 ro 属性
  7. electerm可用的 Termius Dark主题
  8. HTTPConnectionPool Max retries exceeded with url
  9. 后端优化1(SLAM十四讲ch10)-BA
  10. UE4-(蓝图)第二十六课关卡流送(体积域)