Asp.net中的GZip或Deflate压缩文件

7 篇文章 0 订阅
5 篇文章 0 订阅

在DotNet2.0中提供了GZip和Deflate压缩算法,而现在的浏览器几乎都支持 GZip 和 Deflate 压缩,因此在传输一些大的JS或CSS文件(如EXTJS)时对它进行压缩则可以减少下载时间,从而提高加载速度。

为什么使用Gzip
Gzip 是一种流行的文件压缩算法,现在的应用十分广泛,尤其Linux平台,Gzip 压缩纯文本文件效果明显,约可以减少70%以上的文件大小。
Apache 的 Gzip 模块,可以使用 Gzip 压缩算法来对 Apache 服务器发布的网页内容进行压缩后再传输到客户端浏览器,压缩降低了网络传输的字节数,加快网页加载的速度,改善用户的浏览体验,
Gzip与搜索引擎的抓取工具有着更好的关系,如Google 就可以通过直接读取 gzip 文件来比普通手工抓取更快地检索网页。
在 Google 网站管理员工具 (Google Webmaster Tools) 中你可以看到,sitemap.xml.gz 是直接作为 Sitemap 被提交的。

Gzip Web压缩原理

服务器处理HTTP压缩过程

1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息);
2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
3. 如果请求文件是HTML、CSS等静态文件,就到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
4. 如果请求文件的压缩文件不存在,向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

Apache Gzip压缩的模块有两种
mod_gzip 和mod_deflate

先确定服务器开启了对这两个组件之一的支持,Linux 服务器,越来越多的空间商开放了对它们的支持。
如目前 Godaddy、Bluehost 及 DreamHosts 等空间商的服务器都已支持mod_gzip 或mod_deflate。

Gzip也需要客户端浏览器的支持,目前大部分浏览器都已经支持Gzip ,如IE、Mozilla Firefox、Opera、Chrome 等。

通过HTTP头,判断客户端浏览器是否支持接受gzip压缩,若发送的HTTP头中出现以下信息,则表明浏览器支持接受相应的gzip压缩:
Accept-Encoding: gzip     支持mod_gzip
Accept-Encoding: deflate     支持mod_deflate
Accept-Encoding: gzip,deflate    同时支持mod_gzip 和mod_deflate

如果服务器开启了Gzip组件,那么就可以在 http.conf 或 .htaccess 里面进行定制
配置的简单实例:
# mod_gzip:
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file /.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

# mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6 #压缩率, 6是建议值.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml
</ifmodule>

文件MIME 类型可以根据自己情况添加,至于PDF 、图片、音乐文档之类的这些本身都已经高度压缩格式,重复压缩的作用不大,反而会增加CPU 的处理时间及浏览器的渲染而降低性能。
设置后再查看返回的HTTP 头,出现以下信息则表明返回的数据已经过压缩。即网站程序所配置的Gzip 压缩已生效。
Content-Encoding: gzip

注:不管使用mod_gzip 还是mod_deflate,此处返回的信息都一样。因为它们都是实现的gzip压缩方式。

除此之外,还可以通过一些在线检测工具(如:http://www.whatsmyip.org/http_compression/)来检测你的网站内容是否已经过Gzip压缩。

mod_gzip 和mod_deflate的区别

.安装的 Apache Web 服务器版本的差异
Apache 1.x 系列没有内建网页压缩技术,所以才用第三方 mod_gzip 模块来执行压缩。
Apache 2.x 官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate 这个模块,用来取代了 mod_gzip。

.压缩质量
mod_deflate 压缩速度略快
mod_gzip 压缩比高
默认情况下,mod_gzip 会比 mod_deflate 多出 4%~6% 的压缩量

.服务器资源的占用
mod_gzip 服务器CPU的占用要高一些
mod_deflate 是专门为确保服务器的性能而使用的一个压缩模块,需要较少的资源来压缩文件。

高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快

如果网站每天1000独立访客,加快网页的加载速度,使用 mod_gzip
如果网站每天超过1000独立访客,并且使用的是共享的虚拟主机,系统资源有限,使用 mod_deflate 将会是更好的选择。

另外,从Apache 2.0.45开始,mod_deflate 可使用 DeflateCompressionLevel 指令来设置压缩级别。该指令的值可为1至(压缩速度最快,最低的压缩质量)9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质量较为平衡的值)。这个简单的变化更是使得mod_deflate 可以轻松媲美 mod_gzip 的压缩。

P.S. 对于没有启用以上两种Gzip模块的虚拟空间,还可以退而求其次使用php的zlib函数库(同样需要查看服务器是否支持)来压缩文件,只是这种方法使用起来比较麻烦,而且一般会比较耗费服务器资源,请根据情况慎重使用。

 

 

DEFLATE-----

DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。它最初是由Phil Katz为他的PKZIP归档工具第二版所定义的,后来定义在RFC 1951规范中。 人们普遍认为DEFLATE不受任何专利所制约,并且在LZW(GIF文件格式使用)相关的专利失效之前,这种格式除了在ZIP文件格式中得到应用之外也在gzip压缩文件以及PNG图像文件中得到了应用。 DEFLATE压缩与解压的源代码可以在自由、通用的压缩库zlib上找到。 更高压缩率的DEFLATE是7-zip所实现的。AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的DEFLATE程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值