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

news/2024/5/8 16:52:35/文章来源:https://blog.csdn.net/weixin_34302798/article/details/93507719
本文主要介绍如何通过对页面进行压缩从而节省网站的带宽以及提升用户的访问速度。

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

但是,本文并不是介绍如何来提升应用程序的执行效率,前面提到的只不过是为了防止您病急乱投医。在确保您的应用程序的性能已经达到足够好,同时服务器的性能也完全满足的情况下,不妨来试试网页压缩来进一步提升网页的浏览速度,而且非常重要的是,它完全不需要任何的成本,只不过是会让您的服务器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.soLoadModule headers_module modules/mod_headers.so<Location /># Insert filterSetOutputFilter DEFLATE# Netscape 4.x has some problems...BrowserMatch ^Mozilla/4 gzip-only-text/html# Netscape 4.06-4.08 have some more problemsBrowserMatch ^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 imagesSetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary# Make sure proxies don't deliver the wrong contentHeader 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 参数。

IIS 服务器

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

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


图1 设置网站属性
图1 设置网站属性

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


图2 设置 Web 服务扩展
图2 IIS 设置 Web 服务扩展

图3 新建 Web 服务扩展
图3 新建 Web 服务扩展

还没完呢,我们还需要修改一个配置文件,修改之前请先停止 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="htmhtmltxt"HcOnDemandCompLevel="10"HcPriority="1"HcScriptFileExtensions="ASPdllexe"></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();}

结论

以上是目前比较流行的两个 WEB 服务器软件以及 Tomcat 服务器对于页面压缩的配置方法;其他的一些 J2EE 应用服务器如果不支持这个功能的话可以考虑利用过滤器(Servlet Filter)来进行处理,具体的代码以及配置方法可以参考 Resin 服务器所提供的文档。但是有一点需要提醒各位读者的是,本文介绍的访问只是在服务器本身的响应速度已经足够优化的情况下进行,也就是说在带宽成为系统瓶颈的时候才来考虑该方案。


文章来源:http://Jorkin.Reallydo.Com/default.asp?id=490

转载于:https://www.cnblogs.com/pboy2925/archive/2008/03/19/1248003.html

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

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

相关文章

测试一个网站的最大并发量并发数并发用户

这个其实没有固定的算法&#xff0c;必须根据压测的目标特点进行估算。举例子来说明&#xff1a;是一天的访问量&#xff0c;那么我们需要知道哪几个时间段访问人数最多。例如有10小时访问密集区&#xff0c;我们可以估算每小时1000用户&#xff0c;峰值*2或者3&#xff0c;也就…

selenium实战 登录后前三项菜单作业分享(白月黑羽网站selenium自动化学习)

作业地址&#xff1a;http://www.python3.vip/tut/auto/selenium/02/#%E8%A1%A5%E5%85%85%E7%BB%83%E4%B9%A0 from selenium import webdriver# 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriv…

selenium实战 登录后菜单作业分享(白月黑羽网站selenium自动化学习)

我的作业提示&#xff1a;请输入用户名和请输入密码 都成功&#xff0c;但是登录失败3个全部错误&#xff0c;我找不到原因&#xff0c;如果有好的办法请留言&#xff0c;谢谢大家。 from selenium import webdriver# 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动…

selenium实战 登录后菜单添加,查看新增数据是不是第一条数据 (UI-0103)分享(白月黑羽网站selenium自动化学习)

from selenium import webdriver import time # 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriver.exe)wd.implicitly_wait(5)#等待时间 一定要写 # Webwd 实例对象的get方法 可以让浏览器打开…

selenium实战 登录后菜单添加,查看新增数据是不是第一条数据 (UI-0105)分享(白月黑羽网站selenium自动化学习)

from selenium import webdriver import time # 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriver.exe)wd.implicitly_wait(5)#等待时间 一定要写 # Webwd 实例对象的get方法 可以让浏览器打开…

selenium实战 登录后跳转到外部网站,再从外部网站跳转回来 (UI-0106)分享(白月黑羽网站selenium自动化学习)

from selenium import webdriver import time # 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriver.exe)wd.implicitly_wait(5)#等待时间 一定要写 # 登录 wd.get(http://127.0.0.1:8047/mgr/si…

selenium实战 登录后跳转到外部网站,添加多个数据 (UI-0107)分享(白月黑羽网站selenium自动化学习)

from selenium import webdriver from selenium.webdriver.support.ui import Select import time # 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriver.exe)wd.implicitly_wait(5)#等待时间 一…

selenium实战 登录后跳转到外部网站,删除所有订单,添加多个数据 (UI-0108)分享(白月黑羽网站selenium自动化学习)

from selenium import webdriver from selenium.webdriver.support.ui import Select import time # 创建 Webwd 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriver.exe)wd.implicitly_wait(5)#等待时间 一…

selenium实战 登录后菜单添加,对比菜单前三项是不是相应内容 (UI-0101)分享(白月黑羽网站selenium自动化学习)

from selenium import webdriver import time # 创建 WebDriver 实例对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(rD:\tools-work\chromedriver_win32\chromedriver.exe)wd.implicitly_wait(5)#等待时间 一定要写 # WebDriver 实例对象的get方法 可以让浏览…

利用pagespeed插件优化网站css层叠样式文件

"不务正业"的google最近发布了pagespeed插件和apache 2专有的mod_pagespeed页面优化模块&#xff1b;pagespeed插件目前仅有firefox版的&#xff0c;该插件要求预安装有Firebug页面debugger插件&#xff0c;你可以通过Tools->Add-ons->Get Add-ons菜单添加Fire…

网站建设技术方案_即墨【网站建设方案】公司

即墨【网站建设方案】公司&#xff0c;星环信息技术&#xff0c;我们期待与大家携手并进&#xff0c;共同创造更美好的未来。2005年11月1日发布的《成都市推进中央一般公共资源公共服务均等化工作方案》为规范各地及县、市级公共资源平台使用情况&#xff0c;落实自治区实施细则…

地址栏与搜索内容不符的乱码_一文解读影响网站在百度搜索排名的因素有哪些?...

网站在搜索引擎的排名直接决定了网站的流量&#xff0c;在国内&#xff0c;百度搜索引擎的流量占有率80%。所以对于优化人员来讲&#xff0c;seo优化主要是针对百度搜索引擎的优化。在百度往网站排名突然下降的情况下&#xff0c;你需要考虑的是你做了什么还是什么都没做了。今…

40款不容错过的个人摄影设计作品集网站

日期&#xff1a;2012-11-7 来源&#xff1a;GBin1.com 如果你不仅仅是网站设计师同时也是摄影师爱好者的话&#xff0c;那么拍摄高水准的摄影作品绝对可以为你的工作带来更大的帮助&#xff01;你可以将这些照片处理后放到你设计的网站上&#xff0c;绝对是件了不起的作品。当…

无法访问网站故障案例分析报告 科来

某单位部分网段无法访问网站故障案例分析报告故障描述故障环境某单位客户端要访问服务器端&#xff0c;会先经过核心交换机&#xff0c;然后由核心交换机传到多业务交换机&#xff0c;多业务交换机与防火墙相连&#xff0c;经过防火墙后再经过加速器和加密机传&#xff0c;通过…

某网站的编程挑战题目 Java版本的 strToInt

为什么80%的码农都做不了架构师&#xff1f;>>> 题目详情 输入一个表示整数的字符串&#xff0c;把该字符串转换成整数并输出&#xff0c;例如输入字符串"345"&#xff0c;则输出整数345。 请完成函数StrToInt&#xff0c;实现字符串转换成整数的功能。…

使用 ApacheBench 做网站压力测试

2019独角兽企业重金招聘Python工程师标准>>> ab的全称是ApacheBench&#xff0c;是 Apache 附带的一个小工具&#xff0c;专门用于 HTTP Server 的benchmark testing&#xff0c;可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试&#xff0…

7月国内网站流量统计:新浪和凤凰网竞争较大

IDC评述网(idcps.com)07月31日报道&#xff1a;跟据中国互联网协会-中国网站排名最新数据显示&#xff0c;截至2013年7月28日&#xff0c;国内网站独立访问量排名前五的仍旧是&#xff1a;百度、腾讯网、淘宝网、新浪网和凤凰网&#xff0c;如下图。如图所示&#xff0c;在7月份…

【笔记】网站加密认证

一、背景 (1)简介 当用户上网时&#xff0c;为了保证用户和服务器之间的信息传输不会泄漏&#xff0c;会对传输过程进行加密&#xff0c;防止泄密。 其流程如下&#xff1a; 1、当网站设置加密后会拥有证书&#xff0c;公钥锁&#xff0c;私钥。 2、当用户访问某个服务器&…

关于360网马扫描和网站安全狗网马扫描比较测评【转】

2019独角兽企业重金招聘Python工程师标准>>> 很多网站用户经常发现网站被植入后门程序&#xff0c;导致网站被黑客非法控制、非法利用&#xff0c;甚至整台服务器权限被控制。出现这种情况&#xff0c;通过人工来排查&#xff0c;需要一定的技术能力和工作量。因此需…

或使用命令行工具 appcmd.exe 为网站添加 mime 映射_“分子对接技术”之使用AutoDock进行半柔性对接教程...

文 / 利刃君微信ID / ziyuanliren666全文共3928字&#xff0c;推荐阅读时间10分钟。Autodock是一款开源的分子模拟软件&#xff0c;最主要应用于执行配体—蛋白分子对接。它由Scripps研究所的Olson实验室开发与维护&#xff0c;官方网址是http://autodock.scripps.edu/&#xf…