如何预压缩非常大的html文件

时间:2010-06-16 11:02:57

标签: linux apache compression gzip deflate

我需要使用gzip或deflate预压缩一些非常大的html / xml / json文件(大型数据转储)。我从不想要提供未压缩的文件。它们是如此庞大和重复,压缩可能会非常好,虽然一些旧的浏览器不能支持解压缩,我的典型客户将不会使用它们(虽然如果我能产生某种'嘿你需要升级浏览器的消息

我自动生成文件,我可以轻松生成.htaccess文件以与每种文件类型一起使用。基本上我想要的是mod_gunzip的一些版本。因为文件很大,并且因为我将重复提供它们,所以我需要一种方法,允许我在命令行上压缩一次,非常好。

我在本网站上找到了一些关于如何使用gzip进行此操作的信息,但我想知道是否有人可以指导我如何使用deflate执行此操作。奖励指向一个完整的答案,包括我的.htaccess文件应该是什么样子,以及我应该使用的命令行代码(GNU / Linux)来获得最佳压缩。答案的超级奖励积分还解决了如何向不兼容的浏览器发送“抱歉没有文件”消息。

如果我们可以创建一个“预压缩”标签来覆盖这样的问题,那么

会很可爱。

-FT

4 个答案:

答案 0 :(得分:8)

修改:找到AddEncoding in mod_mime

这有效:

<IfModule mod_mime.c>
 <Files "*.html.gz">
  ForceType text/html
 </Files>
 <Files "*.xml.gz">
  ForceType application/xml
 </Files>
 <Files "*.js.gz">
  ForceType application/javascript
 </Files>
 <Files "*.gz">
  AddEncoding gzip .gz
 </Files>
</IfModule>

文档听起来似乎只需要AddEncoding,但我没有让它发挥作用。

此外,Lighttpd的mod_compression可以压缩和缓存(压缩的)文件。

答案 1 :(得分:3)

如果我是你,我会查看内置的文件系统压缩,而不是在apache层执行此操作。

在solaris zfs上有透明压缩,使用zfs compress来压缩文件系统。 同样,Windows可以压缩文件夹,apache将服务于内容,而不知道它在磁盘上压缩的事实。 Linux的文件系统也进行透明压缩。

答案 2 :(得分:2)

对于命令行,编译zlib的zpipe:http://www.zlib.net/zpipe.c然后

zpipe < BIGfile.html > BIGfile.htmlz

例如。

然后使用Zash的示例,设置一个过滤器来更改标题。这应该为您提供RAW deflate文件,现代浏览器probably support

有关压缩文件的另一种方法,请查看使用pigz和zlib(-z)或PKWare zip(-K)压缩选项。测试这些工作是否通过Content-Encoding设置完成。

答案 3 :(得分:0)

在不直接处理moz_gzip / mod_defalte的情况下压缩内容的一种快捷方法是使用ob_gzhandler并修改标头(在任何输出发送到浏览器之前)。

<?php
/* Replace CHANGE_ME with the correct mime type of your large file. 
 i.e: application/json
*/

ob_start ('ob_gzhandler');
header('Content-type: CHANGE_ME; charset: UTF-8');
header('Cache-Control: must-revalidate');
$offset = 60 * 60 * 2 ;
$ExpStr = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT';
header($ExpStr);

/* Stuff to generate your large files here */