`

利用压缩网页来提升网站浏览速度(deflate,gzip )

阅读更多
摘要:利用gzip压缩静态内容,可以大大减小静态内容的体积,而我们在客户端打开页面时就有70-85%的时间消耗在这些静态内容的下载上,特别是大量使用javascript等脚本语言的富客户端网页。所以采用gzip压缩页面是有实际意义的。

1. 利用 Webserver 自带的 gzip 压缩功能,压缩 *.css *.js *.html 等等静态内容,如TOMCAT:

     配置 $TOMCAT_HOME/conf/server.xml

<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" URIEncoding="UTF-8"
   connectionTimeout="20000"
   redirectPort="8443"
   compression="on"
   compressionMinSize="256"
   noCompressionUserAgents="gozilla,traviata"
   compressableMimeType="text/html,text/xml,text/css,text/javascript"/>

2. 手工压缩静态内容

     用gzip先压缩好静态内容的文件,改用一个文件扩展名。在网页中引用静态内容文件。

     关键是要实现一个过滤器,设置压缩的静态内容文件响应的Http头信息:

   response.setHeader("Content-Encoding", "gzip");

或者

   response.setHeader("Content-Encoding", "x-gzip");

----------------------------------------------------------------------------------------------------------------------


本文主要介绍如何通过对页面进行压缩从而节省网站的带宽以及提升用户的访问速度。

网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的 一个因素是应用程序本身的响应速度,因此当你为网站性能所苦恼时,你第一个需要着手进行处理的便是尽可能的提升应用程序的执行速度,你可以使用缓存或者是 优化代码的执行效率来提升应用程序的速度。

但是,本文并不是介绍如何来提升应用程序的执行效率,前面提到的只不过是为了防止您病急乱投医。在确保您的应用程序的性能已经达到足够好,同时服务 器的性能也完全满足的情况下,不妨来试试网页压缩来进一步提升网页的浏览速度,而且非常重要的是,它完全不需要任何的成本,只不过是会让您的服务器CPU 占用率稍微提升一两个百分点而已或者更少。

网页压缩是一项由 WEB 服务器和浏览器之间共同遵守的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,所幸的是现在流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 Apache 和 IIS 等。双方的协商过程如下:

  1. 首先浏览器请求某个 URL 地址,并在请求的头 (head) 中设置属性 accept-encoding 值为 gzip, deflate,表明浏览器支持 gzip 和 deflate 这两种压缩方式(事实上 deflate 也是使用 gzip 压缩协议,下面我们会介绍二者之间的区别);
  2. WEB 服务器接收到请求后判断浏览器是否支持压缩,如果支持就传送压缩后的响应内容,否则传送不经过压缩的内容;
  3. 浏览器获取响应内容后,判断内容是否被压缩,如果是则解压缩,然后显示响应页面的内容。

在实际的应用中我们发现压缩的比率往往在 3 到 10 倍,也就是本来 50k 大小的页面,采用压缩后实际传输的内容大小只有 5 至 15k 大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面 的浏览速度。

接下来我们介绍几种常用的环境下如何启用网页压缩功能。

纯 Tomcat 服务器

如果您的 WEB 应用程序是跑在 Tomcat 服务器下的,而且直接使用 Tomcat 所提供的 HTTP 服务,那建议你马上动手,因为实在是太简单了,你只需要在 server.xml 配置文件中给 HTTP Connector 增加一个 compression 的参数值为 on 并重启 Tomcat 服务器就立刻生效,配置如下:

<Connector port="8080" protocol="HTTP/1.1"
                        maxThreads="150" connectionTimeout="20000"
                        redirectPort="8443" compression="on"/>

 

Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议,它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议,如果浏览器支持就启用 gzip 压缩,否则就不进行任何压缩处理。Tomcat 中还有另外一个参数 compressableMimeType,这个参数可以用来指定压缩哪种类型的内容,例如可以指定该配置值为:text/html, text/plain ,则只压缩 contentType 为 text/html 和 text/plain 的页面,不过您最好也将 css 和 javascript 文件也算在压缩的文件类型中,因为这两者的压缩效果也十分的明显。

 

Apache 服务器

在 apache 1.3 版本,大家常用 mod_gzip 对输出内容进行压缩,现在主流的浏览器都支持 gzip 解压缩。在 apache2 下,这个模块换名为 mod_deflate,对应的模块文件名是 mod_deflate.so。mod_gzip 本文不做介绍,下面描述一下在 Apache 2 下如何启用并配置 mod_deflate 模块。默认安装的 Apache 不管是 Windows 还是 Linux/Unix,都是不启用该模块的, Linux/Unix 下甚至不带该模块,你需要手工编译这个模块。

下面我们分别介绍在 Windows 和 Linux 操作系统下如何启用并配置 mod_deflate 模块。

在 Windows 下采用安装程序安装的 Apache 服务器已经带有 deflate 所需要的模块 mod_deflate.somod_headers.so,我们只需要在 httpd.conf 配置文件中启用并进行相关的配置即可,配置如下:

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

# 设置压缩频率,取值范围在 1(最低压缩率) 到 9(最高压缩率)之间
# 不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源
DeflateCompressionLevel 3
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>

而如果是 Linux/Unix 操作系统,如果你没有在编译安装的过程中将所需要的两个模块 mod_deflatemod_headers 编译进去的话,那就稍微有点麻烦,首先我们先看如何在编译安装 Apache 过程中也同时编译这两个模块,请在执行 configure 程序时增加两个参数分别是:

# ./configure --enable-deflate --enable-headers

 

这样在编译完 Apache 后就可以直接在 httpd.conf 中启用并配置 deflate 模块了,配置的方法跟 Windows 平台下是相同的。

如果说您的 Apache 已经在运行了,不想再重新编译一次,那也可以选择只编译 deflate 模块所需的文件 mod_deflate.cmod_headers.c。这两个文件位于 {apache-src}/modules/filters/ 目录下(其中 {apache-src} 为 apache 源文件所在的目录)。使用如下命令来单独编译这两个源文件。

# {apache-bin}/apxs -i -a -c {apache-src}/modules/filters/mod_deflate.c
                        # {apache-bin}/apxs –i –a –c {apache-src}/modules/filters/mod_headers.c

 

其中 {apache-bin} 为 Apache 安装目录下的 bin 目录,接下来在 httpd.conf 直接配置该模块即可。

很多时候你在单独编译 deflate 模块的时候可能会碰到编译错误,提示是:

Cannot load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate

解决的方法如下:

编辑 /usr/local/apache2/bin/apr-config 文件修改其中的 LDFLAGS 值为 "-lz",然后再重新编译 mod_deflate 模块,apxs -ica mod_deflate.c 即可。

为了省却不必要的麻烦,请尽量在编译安装时直接加上 --enable-deflate --enable-headers 参数。

分享到:
评论

相关推荐

    利用压缩网页来提升网站浏览速度

    【网页压缩技术】是提升网站浏览速度的有效方法,尤其在应用程序性能优化和服务器性能充足的情况下。这项技术基于WEB服务器和浏览器间的协议,确保两者都支持压缩格式,如gzip和deflate。当浏览器发送请求时,它会在...

    php gzip 压缩js或css

    总的来说,合理利用`PHP Gzip`压缩能够有效提升网站性能,减少用户等待时间,提供更好的浏览体验。在实际应用中,还可以结合其他优化技术,如合并CSS和JS文件、使用CDN、缓存策略等,进一步提升网站性能。

    Gzip压缩.docx

    总之,Gzip压缩是提升Web性能的有效手段,通过压缩HTTP传输的数据,减小带宽使用,加快页面加载速度,为用户提供更流畅的浏览体验。正确配置服务器以支持Gzip压缩,同时关注服务器资源的平衡使用,是每个网站管理员...

    Gzip工具包

    Gzip工具包是一款专为优化JavaScript(js)文件而设计的压缩工具,它能够有效地减小文件体积,提高网络传输效率,从而加快浏览器对网页资源的加载速度。在Web开发中,Gzip压缩已经成为一种标准的优化手段,因为它...

    IIS Compression

    Brotli是一种由Google开发的开放源代码的压缩算法,旨在提供比传统压缩方法(如Gzip和Deflate)更高的压缩效率,同时保持解压速度相当。Brotli利用了一种混合的编码方法,结合了LZ77、霍夫曼编码和二阶上下文建模,...

    javascript 脚本压缩工具

    JavaScript脚本压缩工具的主要目的是减小文件大小,提高网页加载速度,降低服务器带宽消耗。这是因为未经压缩的JavaScript代码通常包含大量空格、注释和换行,这些在执行时并非必需,却会增加文件体积。通过压缩工具...

    PHP使用zlib扩展实现GZIP压缩输出的方法详解

    PHP是广泛使用的服务器端脚本语言,它支持多种数据压缩技术,而GZIP压缩是一种高效的数据压缩方式,可以帮助减少网络传输的数据量,从而提升网页加载速度。在PHP中,可以利用内置的zlib扩展来实现GZIP压缩输出。以下...

    Gzip压缩启用图文方法详细说明【IIS6.0、Apache】

    由于Gzip压缩能够有效地减小数据传输量,因此被广泛用于提升WEB应用程序的性能,尤其是高流量网站,经常利用Gzip压缩技术来提高用户访问速度。 使用Gzip压缩技术,通常可以将纯文本内容压缩到原大小的40%左右,这...

    CompressJs_css

    在IT行业中,优化网站性能是至关重要的,尤其是在用户体验和搜索引擎排名方面。...通过实施这些策略,开发者能够为用户提供更快的加载速度和更好的浏览体验,同时也有助于提升网站的整体性能和SEO排名。

    前端优化的几种方法

    据统计,启用gzip压缩后,网页内容的传输量可减少70%~80%,极大地提升了用户体验。 #### 3. 使用浏览器缓存 充分利用浏览器缓存机制可以大幅减少网络请求,加快页面加载速度。对于同一站点内的多个页面,共用的...

    HttpWatch Professional 6.0.14 License

    3. **数据压缩检测**:HttpWatch可以分析HTTP压缩效果,如GZIP或DEFLATE,揭示未压缩和压缩后的数据大小,帮助优化网络带宽利用率。 4. **Cookie管理**:查看和分析HTTP Cookie,了解它们对页面加载和用户体验的...

    httpwatch V6压缩包

    3. **内容压缩检测**:httpwatch能够检测到网络传输字符串是否经过了压缩(如GZIP或DEFLATE),这对于评估压缩效率和节省带宽具有重要意义。 4. **安全性检查**:对于HTTPS连接,httpwatch能够分析证书信息,确保...

    httpwatch抓包工具

    - **压缩分析**: 支持显示GZIP和Deflate等压缩格式的解压后大小,帮助评估压缩效率。 - **SSL/TLS分析**: 可以查看HTTPS连接的详细信息,包括证书详情和加密套件。 - **内存和Cookie管理**: 监控和分析浏览器的...

    控制PHP的输出:缓存并压缩动态页面

    在本文中,我们将探讨如何利用PHP的输出控制函数来优化动态网页的加载速度,特别是通过缓存和压缩页面内容来提升用户体验。首先,我们提到了`mod_gzip`,这是一个Apache模块,它能够对静态HTML页面进行Gzip压缩,...

    Node4-5静态资源服务器实战以及优化压缩文件实例内容

    然后,根据匹配的结果,设置`res.setHeader('Content-Encoding', 'gzip')`或`res.setHeader('Content-Encoding', 'deflate')`,并使用相应的压缩流来处理响应数据。 以下是一个简化的示例代码,展示了如何在Node.js...

    HTTP watch

    HTTP Watch支持分析GZIP和DEFLATE等压缩格式,帮助开发者评估压缩效果,减少数据传输量。同时,它还能检测浏览器的缓存策略,帮助优化缓存利用,提升用户体验。 ### 7. 性能报告 工具可以生成详细的性能报告,包含...

    HttpWatch抓取

    3. **内容压缩检测**:HttpWatch能显示服务器是否对内容进行了GZIP或DEFlate等压缩,以及压缩的效果如何,有助于优化传输效率。 4. **Cookie管理**:分析并显示请求和响应中的Cookie信息,便于理解和管理这些数据。...

    Vary渲染加速方法

    当Vary头的值为"Accept-Encoding"时,它告诉缓存服务器根据请求的编码类型(如gzip、deflate等)来处理响应。这在提供压缩内容时特别有用,因为它确保了不同压缩需求的请求不会错误地重用相同的压缩版本。 Vary渲染...

    程序员需要知道的16件事

    3. **内容压缩**:使用gzip/deflate等压缩技术来减小响应体大小。 4. **文件合并**:将多个样式表和脚本文件合并为一个文件,减少HTTP请求的数量。 5. **性能工具**:熟悉使用Yahoo Exceptional Performance、...

Global site tag (gtag.js) - Google Analytics