精华内容
下载资源
问答
  • 2、网页压缩实现3、压缩功能参数二、实现网页压缩二、图片压缩 一、前言 1、为什么要进行网页压缩? 不管一个系统或网站的大与小,都存在相应的图片处理,生成缩略图、为图片加水印等等,如果涉及到APP端,这个图片...

    一、前言

    1、为什么要进行网页压缩?

    不管一个系统或网站的大与小,都存在相应的图片处理,生成缩略图、为图片加水印等等,如果涉及到APP端,这个图片的处理需求变得更加重要了,因为在目前看来,客户端的屏幕大小不一,会导致以下问题:

    • 图片过大导致APP加载图片速度慢;
    • 消耗用户过多流量。

    在实际的企业当中,nginx服务器上的资源要尽可能的占用的空间少一点。实际上信息量大的网页和高清图片占用存储空间是非常大的,这样不利于服务器性能的优化。
    因此我们要在服务器上面将网页和图片进行压缩,让客户端去下载就可以了。

    2、网页压缩实现

    Nginx性能优化功能: Gzip压缩(大幅度提高页面加载速度) ,开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度,进而优化Nginx性能。经过Gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。Gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的巨大多数浏览器 都支持解析Gzip过的页面

    3、压缩功能参数

    gzip on开启gzip压缩功能
    gzip_ min_ length 1k用于设置允许压缩的页面最小字节数
    gzip_ buffers 416k表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来储gzip压缩结果
    zip_ http_ version 1.0用于设置识别http协议版本,默认是1.1, 目前大部分浏览器已经支持gzip解压,但处理最慢,也比较消耗服务器CPU资源
    gzip_ comp level 2用来指定gzip压缩比,1压缩比最小,处理速度最快; 9压缩比最大,传输速度快,但处理速度最慢,使用默认即可
    gzip_ types text/plain压缩类型,是就对哪些网页文档启用压缩功能
    gzip_ vary on选项可以让前端的缓存服务器缓存经过gzip压缩的页面

    二、实现网页压缩

    步骤一:编辑nginx的默认发布文件/usr/local/nginx/html/index.html

    cd /usr/local/nginx/html/
    cat /etc/passwd > index.html 
    cat /etc/passwd >> index.html 
    cat /etc/passwd >> index.html
    ll #查看index.html文件大小
    nginx -s reload
    

    在这里插入图片描述在这里插入图片描述web页面测试:

    页面搜索172.25.1.1,按F12调出开发者工具,可以看出压缩之前的网页大小为4.44k

    在这里插入图片描述
    步骤二:修改配置文件/usr/local/nginx/conf/nginx.conf,设置压缩功能参数

    vim /usr/local/nginx/conf/nginx.conf
     33     gzip  on;
     34     gzip_min_length 1k;
     35     gzip_comp_level 2;
     36     gzip_types  text/plain application/x-javascript  test/css  application/xml  vascript applic            ation/x-httpd/php  image/gif   image/png;
     ##制定压缩的类型,线上配置时尽可能配置多的压缩类型
    
    nginx -s reload
    

    在这里插入图片描述在这里插入图片描述步骤三:用curl测试Gzip是否成功开启试

    curl -I -H "Accept-Encoding: gzip, deflate" "http://172.25.1.1/"
    

    在这里插入图片描述

    web页面测试:
    F12打开页面管理信息
    ctrl+shift+delete清除浏览器的缓存在这里插入图片描述

    二、图片压缩

    步骤一:停止服务,重新编译。添加新的模块

    cd nginx-1.17.8
    make clean
    ./configure --prefix=/usr/local/nginx  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_realip_module --with-http_image_filter_module=dynamic
    

    在这里插入图片描述在这里插入图片描述
    编译报错:
    ./configure: error: the HTTP image filter module requires the GD library.
    You can either do not enable the module or install the libraries.
    在这里插入图片描述
    解决办法:
    安装gd.x86_64 和gd-devel-2.0.35-26.el7.x86_64.rpm
    点击下载gd-devel安装包

    yum install  -y gd.x86_64 gd-devel-2.0.35-26.el7.x86_64.rpm
    

    在这里插入图片描述在这里插入图片描述
    重新编译:

    ./configure --prefix=/usr/local/nginx  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_realip_module --with-http_image_filter_module=dynamic
    

    在这里插入图片描述
    步骤二:make编译

    make
    

    在这里插入图片描述
    注意:不能make install

    步骤三:替换原来的二进制文件,并将图像模块放到指定存放目录下

    cd objs/
    cp nginx  -f  /usr/local/nginx/sbin/nginx 
    mkdir /usr/local/nginx/modules 
    cp ngx_http_image_filter_module.so  /usr/local/nginx/modules
    

    在这里插入图片描述
    步骤四:编辑nginx配置文件
    vim /usr/local/nginx/conf/nginx.conf

      1 load_module modules/ngx_http_image_filter_module.so;  #放在开头
     50         location /download/ {
     51             image_filter  resize 150  100;
     52             }
    

    在这里插入图片描述
    在这里插入图片描述
    步骤五:下载一个图片并重启服务

    nginx -s reload
    

    在这里插入图片描述在这里插入图片描述

    步骤六:用curl测试图片成功压缩

    curl -I -H "Accept-Encoding: gzip, deflate" "http://172.25.1.1:/test.jpg"
    

    在这里插入图片描述
    web页面测试:
    F12打开页面管理信息
    ctrl+shift+delete清除浏览器的缓存
    在这里插入图片描述

    展开全文
  • 在实际的应用中,我们为了使nginx上的资源尽可能的少占用,而大量的高清的图片与含有信息量大的网页会占用我们非常多的资源。这不利于nginx的性能优化,为了解决这个问题,我们可以做 Gzip压缩。 Nginx性能优化...

    一、网页压缩

    在实际的应用中,我们为了使nginx上的资源尽可能的少占用,而大量的高清的图片与含有信息量大的网页会占用我们非常多的资源。这不利于nginx的性能优化,为了解决这个问题,我们可以做 Gzip压缩。

    Nginx性能优化功能: Gzip压缩(大幅度提高页面加载速度) ,开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度,进而优化Nginx性能。经过Gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。Gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的巨大多数浏览器 都支持解析Gzip过的页面。

    1、修改配置文件/usr/local/nginx/conf/nginx.conf

     33     gzip  on;
     	# 开启gzip压缩功能
     34     gzip_min_length 1;
     	# 设置允许压缩的页面最小字节数;
     35     gzip_comp_level 2;
     	# 设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快; 这里表示压缩级别,可以是09中的任一个,级别越高,压缩就越小,节省了带宽资源,但同时也消耗CPU资源,所以一般折中为6
     36     gzip_types  text/plain application/x-javascript  test/css  application/xml  vascript applic        ation/x-httpd/php  image/gif   image/png;
     	#制定压缩的类型,线上配置时尽可能配置多的压缩类型
    

    在这里插入图片描述2、编辑nginx的默认发布文件/usr/local/nginx/html/index.html

    [root@server2 html]# ls
    50x.html  index.html
    [root@server2 html]# pwd
    /usr/local/nginx/html
    [root@server2 html]# cp /etc/passwd .
    [root@server2 html]# ls
    50x.html  index.html  passwd
    [root@server2 html]# du -sh passwd 
    4.0K	passwd
    [root@server2 html]# vim passwd 
    [root@server2 html]# du -sh passwd 
    44K	passwd
    [root@server2 html]# mv passwd index.html
    mv: overwrite ‘index.html’? y
    [root@server2 html]# du -sh index.html
    44K	index.html
    
    

    3、然后在网页查看大小(按下F12,之后选择Network->Size,便可以查看到其文件大小)
    4、重启服务nginx -s reload,清除缓存,再次查看

    二、图片压缩

    1、停止服务,重新编译。添加新的模块

    [root@server2 nginx-1.15.9]# make clean
    [root@server2 nginx-1.15.9]# ./configure \
    > --prefix=/usr/local/nginx  \
    > --pid-path=/var/run/nginx/nginx.pid \
    > --lock-path=/var/lock/nginx.lock \
    > --error-log-path=/var/log/nginx/error.log \
    > --http-log-path=/var/log/nginx/access.log \
    > --with-http_realip_module  --with-http_image_filter_module=dynamic
    [root@server2 nginx-1.15.9]# make
    [root@server2 nginx-1.15.9]# cd objs/
    [root@server2 objs]# ls
    autoconf.err  nginx.8             ngx_http_image_filter_module_modules.c  ngx_modules.c
    Makefile      ngx_auto_config.h   ngx_http_image_filter_module_modules.o  ngx_modules.o
    nginx         ngx_auto_headers.h  ngx_http_image_filter_module.so         src
    [root@server2 objs]# cp nginx  -f  /usr/local/nginx/sbin/nginx  
    	#将新的二进制文件替换成之前的二进制文件
    cp: overwrite /usr/local/nginx/sbin/nginx’? y
    [root@server2 objs]# mkdir /usr/local/nginx/modules 
    	#创建新的目录,并将图像模块放在目录下
    [root@server2 objs]# cp ngx_http_image_filter_module.so  /usr/local/nginx/modules
    
    

    在这里插入图片描述
    2、编辑nginx配置文件/usr/local/nginx/conf/nginx.conf,重新加载。

     1 load_module  modules/ngx_http_image_filter_module.so;
    
     47         location /search/ {
     48                 image_filter  resize 50  100;
     49                 }
    

    在这里插入图片描述

    3、测试
    在这里插入图片描述

    在这里插入图片描述

    在上面的共享图片中我们可以得知,在浏览器中查询时必须得输入完整的路径,其中包括图片的名称,可是这样显然是不合理的,我们认为将图片都放置一个目录下,通过查看目录选择图片才是一种不错的方式

    展开全文
  • 1、为什么要用GZIP实现网页图片的压缩?nginx怎么实现压缩的? 使用Gzip压缩可以提高CPU 使用率,可以减少服务器发送的字节数量。这就使人们觉得页速度加快了,并且还减少了带宽的用量。 根据所发送数据、可以...

    1、为什么要用GZIP实现网页和图片的压缩?nginx怎么实现压缩的?

    • 使用Gzip压缩可以提高CPU 使用率,可以减少服务器发送的字节数量。这就使人们觉得页速度加快了,并且还减少了带宽的用量。 根据所发送数据、可以压缩的程度以及客户端浏览器是否支持(IIS 只会向支持 Gzip压缩的客户端发送经过 Gzip压缩的内容,如 Internet Explorer 6.0 和 Firefox),您的服务器每秒可以服务于更多的请求。 实际上,几乎每当您减少所返回数据的数量时,都会增加每秒请求数。

    • Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相应的CPU资源。

    • 开源使用"gzip on;"参数来启用压缩,默认是关闭的。

    • Nginx开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度,进而优化Nginx性能,经过Gzip压缩后页面大小可以变为原来的30%甚至更小

    2、web服务器处理请求过程在这里插入图片描述

    3、实现网页的压缩

    第一步:将nginx配置文件内容增添到大于1k;

    [root@server2 html]# du -sh index.html 
    4.0K	index.html
    [root@server2 html]# cat ../logs/access.log >>index.html    //将logs文件内容追加到Index.html文件后面
    [root@server2 html]# du -sh index.html     //文件增大了
    204K	index.html
    

    第二步:用浏览器访问,查看文件大小。

    ctrl  +  shift  + i打开浏览器的开发界面
    ctrl  +  shift  + delete 清除浏览器的缓存
    

    在这里插入图片描述
    和配置的文件差不多大小。
    第三步:进行文件的大小压缩

    [root@server2 sbin]#vim ../conf/nginx.conf
    [root@server2 sbin]# ls
    nginx
    [root@server2 sbin]# ./nginx -s reload
    [root@server2 sbin]# ./nginx -t    //进行语法测试,若失败不加载给worker进程
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    

    在这里插入图片描述
    更详细的解释:
    在这里插入图片描述

    Nginx压缩相关参数概述

    1>.gzip on | off;
    

    Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相应的CPU资源。

    开源使用"gzip on;"参数来启用压缩,默认是关闭的。

    2>.gzip_comp_level lenvel;
    

    压缩比例由低到高从1到9,默认为1。但需要注意的是压缩比设置的越高就会越消耗CPU的资源,因此在生产环境中我们会设置该参数的值在3~5之间,最好不要超过5,因为随着压缩比的增大的确会降低传输的带宽成本但发送数据前会占用更多的CPU时间分片。

    具体设置级别为多少,得咱们运维人员对CPU的利用率做一个监控,如果CPU利用率过低则不会使用,可以酌情将压缩级别参数调大,当然调大后依旧需要观察一段业务高峰期时间CPU的利用率,最终会找到一个适合你们公司业务的压缩比例。

    3>.gzip_disable "MSIE [1-6]\.";
    

    禁用IE6 gzip功能。

    4>.gzip_min_length 1k;
    

    gzip压缩的最小文件,小于设置值的文件将不会压缩

    5>. gzip_http_version 1.0|1.1;
    

    启用压缩功能时,协议的最小版本,默认HTTP/1.1

    6>.gzip_buffers number size;
    

    指定Nginx服务需要向服务器申请的缓存空间的个数*大小,默认32 4k|16 8k;

    7>.gzip_types mine-type ...;
    

    指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错。

    8>.gzip_vary on| off;
    

    如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,建议开启该参数,让用户知道咱们服务端是支持压缩的。

    9>.Nginx对文件的压缩功能是依赖于模块ngx_http_gzip_module,该模块默认是已经安装的。
    

    清除浏览器缓存,查看此时传送文件的大小:
    在这里插入图片描述
    由此可见传输过程中,网页大小已被压缩为2.98k。

    3、实现网页图片的大小压缩

    第一步:在共享目录下新建一个目录,用来放照片。

     [root@server2 html]# mkdir download
    [root@server2 html]# cd download/
    [root@server2 download]# ls
    雷霆专业完美证件照11.jpg    ####照片为.jpg格式,那么在gzip压缩模块中,就要添加该种类型的文件。
    

    第二步:重新编译nginx服务,为其添加传输图片模块。

    [root@server2 download]# make clean    ///删除编译好的二进制文件,重新生成
    rm -fr makefile
    [root@server2 nginx-1.18.0]# ./configure --help |grep image
      --with-http_image_filter_module    enable ngx_http_image_filter_module
      --with-http_image_filter_module=dynamic
                                         enable dynamic ngx_http_image_filter_module
    [root@server2 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx  --with-http_image_filter_module --with-http_image_filter_module=dynamic
    

    在这里插入图片描述
    第三步:在网上下载该库并安装点击此处进行下载,再次进行编译,并将编译好的二进制文件读进nginx执行脚本中,将该执行脚本移动到/usr/local/nginx/sbin目录下替换原来的执行脚本。

    在这里插入图片描述
    所以我们下载了gd-devel-2.0.35-26.el7.x86_64.rpm
    在这里插入图片描述

    [root@server2 nginx-1.18.0]# yum install -y '//tmp/VMwareDnD/4XttB8/gd-devel-2.0.35-26.el7.x86_64.rpm' 
    [root@server2 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx  --with-http_image_filter_module --with-http_image_filter_module=dynamic    //再次进行编译
    

    此次编译成功。
    在这里插入图片描述

    [root@server2 nginx-1.18.0]# make     //make是将makefile二进制文件中的内容加载到nginx执行脚本中,不能进行make install,否则会将之前所有的文件配置恢复到刚安装阶段
    [root@server2 objs]# cp nginx //usr/local/nginx/sbin/
    cp: overwrite ‘//usr/local/nginx/sbin/nginx’? y
    
    

    在这里插入图片描述

    第四步:将成功下载的模块ngx_http_image_filter_module.so ,移动到/usr/local/nginx/modules下,并将该模块加载到配置文件中,并且将文件类型为.jpg的格式添加到配置文件中。

    [root@server2 nginx-1.18.0]# cd objs/
    [root@server2 objs]# ls
    autoconf.err  nginx.8             ngx_http_image_filter_module_modules.c  ngx_modules.c
    Makefile      ngx_auto_config.h   ngx_http_image_filter_module_modules.o  ngx_modules.o
    nginx         ngx_auto_headers.h  ngx_http_image_filter_module.so         src
    [root@server2 objs]# cd /usr/local/nginx/
    [root@server2 nginx]# mkdir modules
    [root@server2 nginx]# cd modules/
    [root@server2 modules]# ls
    [root@server2 modules]# mv /mnt/nginx-1.18.0/objs/ngx_http_image_filter_module.so .
    [root@server2 modules]# ls
    ngx_http_image_filter_module.so
    

    在这里插入图片描述

    [root@server2 modules]# cd ..
    [root@server2 nginx]# cd conf/
    [root@server2 conf]# vim nginx.conf
    [root@server2 conf]# ../sbin/nginx -s reload
    [root@server2 conf]# ../sbin/nginx -t     ///检测配置文件中语句的正确
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    

    在这里插入图片描述
    将类型为.jpg格式文件压缩加入gzip:
    在这里插入图片描述
    将默认发布目录html/下的文件存在目录download/写入配置文件中:
    在这里插入图片描述
    看看resize含义:
    在这里插入图片描述

    重新加载服务,在服务器端查看是否压缩:
    在这里插入图片描述

    展开全文
  • gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端...
     gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端响应后,会将页面,JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩,然后传输到客户端,由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量(一般都有60%左右),一些PHP,JSP文件也能够进行压缩。
    
    1.Tomcat 直接开启Gzip
    打开Tomcat 目录下的conf下的server.xml,并找到如下信息:
    Xml代码 复制代码 收藏代码tomcat <wbr>gzip <wbr>网页压缩技术
    1. <!-- Note : To use gzip compression you could set the following properties :
    2. compression="on"
    3. compressionMinSize="2048"
    4. noCompressionUserAgents="gozilla, traviata"
    5. compressableMimeType="text/html,text/xml"
    6. -->
    <!-- Note : To use gzip compression you could set the following properties : compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" -->

    把它们加入到你配置的<Connector port="80" .../>中去。如果要压缩css 和 js,加入compressableMimeType="text/html,text/xml,text/css,text/javascript"。还要压缩图片,加入compressableMimeType="text/html,text/xml,text/css,text/javascript,image/gif,image/jpg"。
    开启后重启Tomcat ,通过浏览器查看headers信息就能看到是否开启。

    2.使用filter,在代码级别完成web应用的gzip压缩的开启。

    (1).CachedResponseWrapper类
    实现定制输出的关键是对HttpServletResponse 进行包装,截获所有的输出,等到过滤器链处理完毕后,再对截获的输出进行处理,并写入到真正的HttpServletResponse 对象中。JavaEE 框架已经定义了一个HttpServletResponseWrapp er 类使得包装HttpServletResponse 更加容易。我们扩展这个HttpServletResponseWrapp er,截获所有的输出,并保存到ByteArrayOutputStream 中。
    定制的包装响应能方便地从帮助类 HttpServletResponseWrapp er 中导出。这一类粗略地执行许多方法,允许我们简单地覆盖 getOutputStream() 方法以及 getWriter() 方法,提供了定制输出流的实例。
    HttpServletResponseWrapp er这个类的使用包括以下五个步骤:
    1)建立一个响应包装器。扩展javax.servlet.http.HttpServletResponseWrapp er。
    2)提供一个缓存输出的PrintWriter。重载getWriter方法,返回一个保存发送给它的所有东西的PrintWriter,并把结果存进一个可以稍后访问的字段中。
    3)传递该包装器给doFilter。此调用是合法的,因为HttpServletResponseWrapp er实现HttpServletResponse。
    4)提取和修改输出。在调用FilterChain的doFilter方法后,原资源的输出只要利用步骤2中提供的机制就可以得到。只要对你的应用适合,就可以修改或替换它。
    5)发送修改过的输出到客户机。因为原资源不再发送输出到客户机(这些输出已经存放到你的响应包装器中了),所以必须发送这些输出。这样,你的过滤器需要从原响应对象中获得PrintWriter或OutputStream,并传递修改过的输出到该流中。
    Java代码 复制代码 收藏代码tomcat <wbr>gzip <wbr>网页压缩技术
    1. class CachedResponseWrapper extends HttpServletResponseWrapper {
    2. public static final int OUTPUT_NONE = 0;
    3. public static final int OUTPUT_WRITER = 1;
    4. public static final int OUTPUT_STREAM = 2;
    5. private int outputType = OUTPUT_NONE;
    6. private int status = SC_OK;
    7. private ServletOutputStream output = null;
    8. private PrintWriter writer = null;
    9. private ByteArrayOutputStream buffer = null;
    10. public CachedResponseWrapper(HttpServletResponse resp) throws IOException {
    11. super(resp);
    12. buffer = new ByteArrayOutputStream();
    13. }
    14. public int getStatus() {
    15. return status;
    16. }
    17. public void setStatus(int status) {
    18. super.setStatus(status);
    19. this.status = status;
    20. }
    21. public void setStatus(int status, String string) {
    22. super.setStatus(status, string);
    23. this.status = status;
    24. }
    25. public void sendError(int status, String string) throws IOException {
    26. super.sendError(status, string);
    27. this.status = status;
    28. }
    29. public void sendError(int status) throws IOException {
    30. super.sendError(status);
    31. this.status = status;
    32. }
    33. public void sendRedirect(String location) throws IOException {
    34. super.sendRedirect(location);
    35. this.status = SC_MOVED_TEMPORARILY;
    36. }
    37. public PrintWriter getWriter() throws IOException {
    38. if (outputType == OUTPUT_STREAM)
    39. throw new IllegalStateException();
    40. else if (outputType == OUTPUT_WRITER)
    41. return writer;
    42. else {
    43. outputType = OUTPUT_WRITER;
    44. writer = new PrintWriter(new OutputStreamWriter(buffer,
    45. getCharacterEncoding()));
    46. return writer;
    47. }
    48. }
    49. public ServletOutputStream getOutputStream() throws IOException {
    50. if (outputType == OUTPUT_WRITER)
    51. throw new IllegalStateException();
    52. else if (outputType == OUTPUT_STREAM)
    53. return output;
    54. else {
    55. outputType = OUTPUT_STREAM;
    56. output = new WrappedOutputStream(buffer);
    57. return output;
    58. }
    59. }
    60. public void flushBuffer() throws IOException {
    61. if (outputType == OUTPUT_WRITER)
    62. writer.flush();
    63. if (outputType == OUTPUT_STREAM)
    64. output.flush();
    65. }
    66. public void reset() {
    67. outputType = OUTPUT_NONE;
    68. buffer.reset();
    69. }
    70. public byte[] getResponseData() throws IOException {
    71. flushBuffer();
    72. return buffer.toByteArray();
    73. }
    74. class WrappedOutputStream extends ServletOutputStream {
    75. private ByteArrayOutputStream buffer;
    76. public WrappedOutputStream(ByteArrayOutputStream buffer) {
    77. this.buffer = buffer;
    78. }
    79. public void write(int b) throws IOException {
    80. buffer.write(b);
    81. }
    82. public byte[] toByteArray() {
    83. return buffer.toByteArray();
    84. }
    85. }
    86. }
     class CachedResponseWrapper extends HttpServletResponseWrapper { public static final int OUTPUT_NONE = 0; public static final int OUTPUT_WRITER = 1; public static final int OUTPUT_STREAM = 2; private int outputType = OUTPUT_NONE; private int status = SC_OK; private ServletOutputStream output = null; private PrintWriter writer = null; private ByteArrayOutputStream buffer = null; public CachedResponseWrapper(HttpServletResponse resp) throws IOException { super(resp); buffer = new ByteArrayOutputStream(); } public int getStatus() { return status; } public void setStatus(int status) { super.setStatus(status); this.status = status; } public void setStatus(int status, String string) { super.setStatus(status, string); this.status = status; } public void sendError(int status, String string) throws IOException { super.sendError(status, string); this.status = status; } public void sendError(int status) throws IOException { super.sendError(status); this.status = status; } public void sendRedirect(String location) throws IOException { super.sendRedirect(location); this.status = SC_MOVED_TEMPORARILY; } public PrintWriter getWriter() throws IOException { if (outputType == OUTPUT_STREAM) throw new IllegalStateException(); else if (outputType == OUTPUT_WRITER) return writer; else { outputType = OUTPUT_WRITER; writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding())); return writer; } } public ServletOutputStream getOutputStream() throws IOException { if (outputType == OUTPUT_WRITER) throw new IllegalStateException(); else if (outputType == OUTPUT_STREAM) return output; else { outputType = OUTPUT_STREAM; output = new WrappedOutputStream(buffer); return output; } } public void flushBuffer() throws IOException { if (outputType == OUTPUT_WRITER) writer.flush(); if (outputType == OUTPUT_STREAM) output.flush(); } public void reset() { outputType = OUTPUT_NONE; buffer.reset(); } public byte[] getResponseData() throws IOException { flushBuffer(); return buffer.toByteArray(); } class WrappedOutputStream extends ServletOutputStream { private ByteArrayOutputStream buffer; public WrappedOutputStream(ByteArrayOutputStream buffer) { this.buffer = buffer; } public void write(int b) throws IOException { buffer.write(b); } public byte[] toByteArray() { return buffer.toByteArray(); } } }

    (2).GZipFilter类
    Java代码 复制代码 收藏代码tomcat <wbr>gzip <wbr>网页压缩技术
    1. public class GZipFilter implements Filter {
    2. public void init(FilterConfig arg0) throws ServletException {
    3. }
    4. public void doFilter(ServletRequest request, ServletResponse response,
    5. FilterChain chain) throws IOException, ServletException {
    6. HttpServletResponse httpResponse = (HttpServletResponse) response;
    7. CachedResponseWrapper wrapper = new CachedResponseWrapper(httpResponse);
    8. // 写入wrapper:
    9. chain.doFilter(request, wrapper);
    10. // 对响应进行处理,这里是进行GZip压缩:
    11. byte[] data = GZipUtil.gzip(wrapper.getResponseData());
    12. httpResponse.setHeader("Content-Encoding", "gzip");
    13. httpResponse.setContentLength(data.length);
    14. ServletOutputStream output = response.getOutputStream();
    15. output.write(data);
    16. output.flush();
    17. }
    18. public void destroy() {
    19. }
    20. }
    public class GZipFilter implements Filter { public void init(FilterConfig arg0) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; CachedResponseWrapper wrapper = new CachedResponseWrapper(httpResponse); // 写入wrapper: chain.doFilter(request, wrapper); // 对响应进行处理,这里是进行GZip压缩: byte[] data = GZipUtil.gzip(wrapper.getResponseData()); httpResponse.setHeader("Content-Encoding", "gzip"); httpResponse.setContentLength(data.length); ServletOutputStream output = response.getOutputStream(); output.write(data); output.flush(); } public void destroy() { } }

    (3).GZipUtil类
    Java代码 复制代码 收藏代码tomcat <wbr>gzip <wbr>网页压缩技术
    1. public final class GZipUtil {
    2. public static byte[] gzip(byte[] data) {
    3. ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
    4. GZIPOutputStream output = null;
    5. try {
    6. output = new GZIPOutputStream(byteOutput);
    7. output.write(data);
    8. } catch (IOException e) {
    9. throw new RuntimeException("G-Zip failed.", e);
    10. } finally {
    11. if (output != null) {
    12. try {
    13. output.close();
    14. } catch (IOException e) {
    15. }
    16. }
    17. }
    18. return byteOutput.toByteArray();
    19. }
    20. }
    public final class GZipUtil { public static byte[] gzip(byte[] data) { ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240); GZIPOutputStream output = null; try { output = new GZIPOutputStream(byteOutput); output.write(data); } catch (IOException e) { throw new RuntimeException("G-Zip failed.", e); } finally { if (output != null) { try { output.close(); } catch (IOException e) { } } } return byteOutput.toByteArray(); } }

    (4).在web.xml中配置 GZipFilter
    Xml代码 复制代码 收藏代码tomcat <wbr>gzip <wbr>网页压缩技术
    1. <filter>
    2. <filter-name>GZipFilter</filter-name>
    3. <filter-class>com.logcd.filter.GZipFilter</filter-class>
    4. </filter>
    5. <filter-mapping>
    6. <filter-name>GZipFilter</filter-name>
    7. <url-pattern>*.html</url-pattern>
    8. </filter-mapping>
    展开全文
  • Gzip压缩我很早已经就启用了,不过从未与大家分享过。今天小编给大家分享Nginx启用GZIP压缩网页传输方法,需要的朋友参考下吧
  • 文章目录1.开启nginx压缩功能2....一般我们需要压缩的内容有:txt,js,html,css等,而图片,视频,flash不压缩 vi /usr/local/nginx/conf/nginx.conf http { ...... gzip on; gzip_min_length 1k; gzip_buffers
  • 原理:浏览器—请求—-> 声明可以接受 gzip压缩 或 deflate压缩 或compress 或 sdch压缩 从http协议的角度看–请求头 声明 acceopt-encoding: gzip deflate sdch (是指压缩算法,其中sdch是google倡导的一种压缩方式,...
  • Gzip压缩我很早已经就启用了,...它的好处显而易见,提高网页浏览速度,无论是之前说的精简代码、压缩图片都不如启用Gzip来的实在。下图为启用Gzip后的效果。 Gzip压缩效率非常高,通常可以达到70%的压缩率,也...
  • 编码:图片经过base64编码,再进行gzip压缩。 解码:gzip解压,base64解码。
  • Gzip压缩我很早已经就启用了,不过从未与大家...它的好处显而易见,提高网页浏览速度,无论是之前说的精简代码、压缩图片都不如启用Gzip来的实在。下图为启用Gzip后的效果。 Gzip压缩效率非常高,通常可以达到7
  • 利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加...
  • 为了降低tomcat服务的压力,把页面上的图片采用windows版的nginx...通过站长工具中的"网页GZIP压缩检测"工具检测图片的压缩率达到了69.53%,如下图: 下面介绍nginx.conf文件是怎么配置的: 1、打开nginx.co
  • 关于性能优化有很多方法,启用gzip压缩是其中的一种,也是最直观的。所谓压缩就是,将原始文件变得更小,这样浏览器加载的就可以更快,用户的等待时间就会减少,体验就会提升。 如果你使用的是Tomcat8的服务器,就...
  • Gzip

    2016-11-03 14:01:31
    原理简介HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求服务器对应资源后,从服务器端将资源...更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,329
精华内容 12,531
关键字:

gzip网页图片