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

news/2024/5/10 8:42:35/文章来源:https://blog.csdn.net/shiqiang1234/article/details/1448511

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

但是,本文并不是介绍如何来提升应用程序的执行效率,前面提到的只不过是为了防止您病急乱投医。在确保您的应用程序的性能已经达到足够好,同时服务器的性能也完全满足的情况下,不妨来试试网页压缩来进一步提升网页的浏览速度,而且非常重要的是,它完全不需要任何的成本,只不过是会让您的服务器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大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。

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

1. 纯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文件也算在压缩的文件类型中,因为这两者的压缩效果也十分的明显。

2. Apache服务器

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

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

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

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
<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_deflate和mod_headers编译进去的话,那就稍微有点麻烦,首先我们先看如何在编译安装Apache过程中也同时编译这两个模块,请在执行configure程序时增加两个参数分别是

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

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

如果说您的Apache已经在运行了,不想再重新编译一次,那也可以选择只编译deflate模块所需的文件mod_deflate.c和mod_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参数。

3. IIS服务器

微软的IIS服务器同样也是目前用得最多的WEB服务器之一,而且用来运行ASP页面也是必不可少的。IIS6本身支持gzip压缩,IIS5就比较费劲了,你可以找一些第三方的组件来处理,例如httpzip,网址是:http://www.port80software.com/products/httpzip/?vid=3354166,不过这玩意是收费的。接下来我们介绍如何在IIS6中启用压缩功能。

打开Internet信息服务(IIS)管理器,右击"网站"->"属性",选择"服务"。在"HTTP压缩"框中选中"压缩应用程序文件"和"压缩静态文件",按需要设置"临时目录"和"临时目录的最大限制",如下图所示:

接下来配置gzip组件,在Internet信息服务(IIS)管理器,点击"Web服务扩展"->"增加一个新的Web服务扩展...",在"新建Web服务扩展"框中输入扩展名"HTTP Compression",添加"要求的文件"为C:/WINDOWS/system32/inetsrv/gzip.dll,选中"设置扩展状态为允许",如下图所示:

还没完呢,我们还需要修改一个配置文件,修改之前请先停止IIS服务,打开C:/Windows/System32/inetsrv/MetaBase.xml,这个文件很大,找到下面一段信息:

<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
  HcCompressionDll="%windir%/system32/inetsrv/gzip.dll"
  HcCreateFlags="1"
  HcDoDynamicCompression="TRUE"
  HcDoOnDemandCompression="TRUE"
  HcDoStaticCompression="TRUE"
  HcDynamicCompressionLevel="0"
  HcFileExtensions="htm
   html
   txt"
  HcOnDemandCompLevel="10"
  HcPriority="1"
  HcScriptFileExtensions="asp
   dll
   exe"
 >
</IIsCompressionScheme>

增加一些要进行压缩的文件后缀,其中HcFileExtensions是静态文件的扩展名,增加js和css等;HcScriptFileExtensions为动态文件的扩展名,增加aspx,保存后启动IIS即可生效。

最后我们介绍如何来测试前面所做的工作是否起效,你可能会觉得很奇怪,配置好了,用浏览器打开页面正常,查看页面源码,内容并没有变化,大小也跟原来一样,怎么回事呢?这是因为浏览器已经把内容解压了的结果,有两个方法来判断压缩是否生效:第一,查看WEB服务器的日志,不管是Apache或者是IIS,二者的访问日志格式都差不多是下面这种格式:

127.0.0.1 - - [14/May/2006:08:44:28 +0800] "GET /manual/style/css/manual.css HTTP/1.1" 200 19351

最后两个数字分别是HTTP的结果码(200表示OK),19351表示的是响应内容的大小,把这个大小跟你在浏览器上查看源码的大小比较一下就可以知道是否生效。另外一种方法就是自己写一个HTTP客户端的小程序并设置Accept-Encoding的值为gzip,deflate,由这个程序去请求服务器端的某个URL地址,然后打印出响应的内容,如果是一堆乱码,恭喜你,配置成功。下面是一段Java写的测试客户端代码(需要用到commons-httpclient包):

HttpClient http = new HttpClient();  
String url = "
http://www.dlog.cn/javayou";
GetMethod get = new GetMethod(url);
try{
 System.out.println("fetching url : "+ url);
 get.addRequestHeader("accept-encoding", "gzip,deflate");
 int er = http.executeMethod(get);
 if(er==200){
  System.out.println(get.getResponseContentLength());
  String html = get.getResponseBodyAsString();
  System.out.println(html);
  System.out.println(html.getBytes().length);
 }
}finally{
 get.releaseConnection();
}

相关网址

Apache http://httpd.apache.org
Tomcat http://tomcat.apache.org
IIS 6.0 http://www.microsoft.com/windowsserver2003/iis/
mod_deflate详细配置文档 http://httpd.apache.org/docs/2.2/mod/mod_deflate.html

关于作者

刘冬,一直使用J2EE/J2ME从事移动互联网方面的开发,拥有开源博客产品DLOG4J,目前DLOG4J已经推出3.0多用户版。您可以通过Java自由人网站来跟他联系,网址是:http://www.dlog.cn/javayou ,另外他的邮件地址是javayou@gmail.com。

关键字: Apache  IIS  mod_deflate  mod_gzip  Tomcat 
引用地址: http://www.javayou.com/html/trackback.do?id=4910&type=1 (复制地址)
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_901831.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm的校园门户网站源码+开题报告+需求分析+mysql数据库+前端html文件

下载地址&#xff1a;https://download.csdn.net/download/biyesheji250/28740242 项目介绍: 基于ssm的校园门户网站源码开题报告需求分析mysql数据库前端html文件 系统说明: 南京晓庄学院本科毕业论文&#xff08;设计&#xff09;开题报告 所属系(院)&#xff1a;信息工程…

一、一步步构建高并发分布式网站架构(1.1)

1.1 分什么布 我尽量不把这类文章写成软件工程专业的死板教学用书。但是每章第一节的确都是构建一个健全系统不可或缺的概念知识。 其实在前言中&#xff0c;我就已经叨叙了为什么要使用分布式架构。简而言之&#xff0c;就是要采用“分而治之”的思想&#xff0c;将网站这个…

一、一步步构建高并发分布式网站架构(1.2)

1.2 瓶颈分析 不同网站有不同的属于该类型网站的特定性能瓶颈。比如资讯类网站大部分在进行读数据库&#xff0c;文件存储类网站大部分在进行文件I/O操作&#xff0c;而如果网站业务是计算密集型&#xff0c;性能瓶颈一般在CPU。 1.2.1 Linux 下的性能监测 要找到网站的瓶颈…

一、一步步构建高并发分布式网站架构

前言 适合对象 我用LA(N)MP ✔ 我用ThinkPHP5 ✔ 我为小但逐渐发展网站工作 ✔ 我开发/管理的PHP网站遇到了瓶颈 ✔ 我会基本操作 ✔ 本文会带你了解一般的适合PHP网站的分布式系统的构建&#xff0c;对一个PHP程序员来说&#xff0c;应该易于理解、实现&#xff0c;希望能实…

测试网站访问速度的5个方法

网页载入速度对于一个网站来讲很关键&#xff0c;Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中&#xff0c;也就是说如果你的网站有足够的内容&#xff0c;而且载入速度比别人的网站更快一步的话&#xff0c;那么你就是获得更好的排名。那么下面就赶快测…

远程访问Docker镜像内宝塔搭建的网站

应用场景 近日&#xff0c;因为要搭建很多测试网站环境&#xff0c;本着可偷懒的原则&#xff0c;采用的Docker来搞。并在Docker镜像中装入宝塔面板 操作流程 1、拉取镜像&#xff0c;装宝塔面板 这里选择的centos 8.0&#xff0c;安装宝塔。 报错情况&#xff1a; Error: …

8个免费下载文献的学术网站(亲测可用)

给大家推荐8个免费下载文献的学术网站&#xff0c;希望能帮到大家。 本文首发于公众号智慧科研。 1.Library Genesis Library Genesis号称是帮助全人类知识无版权传播的计划。网站上论文很多&#xff0c;下载方便&#xff0c;几乎每天都在更新。 网址&#xff1a;http://ge…

宝塔+wordpress服务器个人网站建站教程

一个非常简单且友好的个人网站建站教程 前期需要准备的工具: 一台云服务器(一般都包含了公网IP)。 我们采用的策略是宝塔wordpress安装。宝塔是一个对服务器网站资源管理的工具&#xff0c;而wordpress则是一个十分常用的基于php的网站模板。 安装宝塔 下载地址 https://www…

python爬取动漫网站的动漫

最近学了一下爬虫&#xff0c;就写段代码来试一下成果如何.&#xff08;目的是爬取某动漫网站上的一部动漫darling in the franxx&#xff09; 版本是python3.7 import requests import refrom selenium import webdriverimport osheaders{user-agent : Mozilla/5.0 (Windows …

《从零开始学Swift》学习笔记(Day 2)——使用Web网站编写Swift代码

Swift 2.0学习笔记——使用Web网站编写Swift代码 原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客 Swift程序不能在Windows其他平台编译和运行&#xff0c;有人提供了一个网站swiftstub.com&#xff0c;左栏是代码编辑窗口&#xff0c;右栏是运行结果窗口。…

百家号怎么加网站链接进行引流,方法让你轻松掌握

互联网推广模式方法一直在变&#xff0c;平台也在变&#xff0c;当然推广思维模式也要跟着变。现在大家对网站seo优化似乎失去了信心&#xff0c;原因是百度新算法大幅度提升 自家产品&#xff0c;不愿意给企业站或者个人网站倒流了。那么作为推广运营的我们&#xff0c;势必也…

水产百科网站(SSM,MySQL )

【项目包含内容】 【视频运行指导教程目录】 视频&#xff1a;https://www.bilibili.com/video/BV1Xa4y1v7dx/ 【项目运行工具】 Eclipse JDK1.8 TOMCAT8 MYSQL 链接&#xff1a;https://pan.baidu.com/s/1BJCnUCTlqzVA6zEJpNxgYw 提取码&#xff1a;f2ni 【部分项目…

学习网站推荐

正文&#xff1a; 菜鸟教程https://www.runoob.com/ 对于要学习某一门流行编程语言来说&#xff0c;我首推这个网站。这个网站相比于在我看过的来说呢&#xff0c;是看起来比较舒服的一个&#xff0c;里面涵盖大多数编程语言等&#xff0c;如Python、Java、C、C、JavaScript、…

电影影视网站对接微信公众号 日引流500+的实例教学

哈喽&#xff0c;大家好&#xff0c; 今天写一个关于电影网站对接公众号&#xff0c;日引流500的教程。首先自己百度找一个电影网站&#xff0c;获取网站的TOKEN和URL对接地址。 token&#xff1a; qweqwe URL: http://e.66hai.com/api.php/wechat注意&#xff1a;还需要一…

Vue项目实战-小商城的基本功能的实现-移动网站开发实例

1.项目的效果图 以下效果图是在谷歌浏览器的手机适配模式看到的。 主页展示 新闻资讯展示 详细新闻资讯展示 图片列表展示 缩略图展示 商城展示 2.工具技术准备 工具&#xff1a;vscode。 技术&#xff1a;Vue.js,node.js,MUI,Mint-UI. 3.项目目录的详情 4.项目配置文件 …

企业实战 -大型网站架构概述

文章目录 企业实战 -大型网站架构概述网站架构的发展历程初始阶段的网站应用和数据分离使用缓存改善网站性能缓存技术: 使用应用服务器集群改善并发处理能力数据库读写分离使用反向代理和CDN加速网站响应使用分布式文件系统和分布式数据库系统使用NoSQL和搜索引擎业务拆分分布式…

Android 设计相关网站推荐

这篇文章给大家介绍几个设计相关的网站&#xff0c;因为博主除了软件开发以外还比较喜欢设计&#xff0c;据我观察了解程序员普遍审美都是比较差的&#xff0c;所以这次给大家推荐几个我认为比较好的用来帮助开发和提升审美的网站。 <1> MaterialPalette&#xff1a;Mat…

PHP开发电脑网站支付宝支付详细流程(沙箱测试篇)

先附上我开始做沙箱测试的时候写的笔记 &#xff08;1&#xff09;准备工作 1、蚂蚁金服开放平台的商户账号&#xff08;个人账号不行&#xff09; 2、php5.5以上的开发环境 &#xff08;2&#xff09;具体流程 1、demo下载 进入蚂蚁金服开放平台的首页&#xff0c;选择文…

Thinkphp5开发电脑网站支付宝支付详细流程(线上测试篇)

在沙箱测试篇讲过的我在这里就不再做重复&#xff0c;详情请见上一篇PHP开发电脑网站支付宝支付详细流程&#xff08;沙箱测试篇&#xff09; 在沙箱测试的时候使用的是沙箱环境中的配置&#xff0c;现在进行线上测试&#xff0c;需要创建应用 1、创建应用 登录蚂蚁金服开放…

数据采集之爬取2019最好大学网站前四列排名保存为csv文件格式简单案例 BeautifulSoup

数据采集之爬取2019最好大学网站前四列排名 保存为csv文件格式 简单案例 BeautifulSoup 目录&#xff1a; 第一步 观察网页 第二步 使用requests、 BeautifulSoup解析数据 第三步 代码呈现结果 开始&#xff1a; 第一步 观察网页 第二步 使用request、 BeautifulSoup解析…