代码之家  ›  专栏  ›  技术社区  ›  ftrotter mario

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

  •  10
  • ftrotter mario  · 技术社区  · 14 年前

    我需要使用gzip或deflate预压缩一些非常大的html/xml/json文件(大数据转储)。我从不想提供未压缩的文件。它们是如此的大和重复,压缩可能会非常好地工作,虽然一些旧的浏览器不支持解压缩,但我的典型客户不会使用它们(尽管如果我可以生成某种“嘿,您需要升级浏览器”的消息,这会很好)

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

    我在这个站点上找到了一些关于如何使用gzip的信息,但是我想知道是否有人可以帮助我使用deflate来完成这个操作。完整答案的奖励点包括.htaccess文件应该是什么样子,以及我应该使用的命令行代码(gnu/linux)以获得最佳压缩。回答“对不起,没有给你的文件”的问题时,你会得到额外的奖励。

    如果我们能创建一个“预压缩”标签来涵盖这样的问题,那就太好了。

    -FT

    4 回复  |  直到 14 年前
        1
  •  8
  •   Zash    14 年前

    编辑: 发现 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 可以压缩和缓存(压缩的)文件。

        2
  •  3
  •   Jubal    14 年前

    如果我是您,我将研究内置文件系统压缩,而不是在Apache层进行压缩。

    在Solaris zfs具有透明压缩的情况下,使用zfs compress只压缩文件系统。 类似地,Windows可以压缩文件夹,Apache将服务于内容,而忽略了它在磁盘上被压缩的事实。 Linux也有执行透明压缩的文件系统。

        3
  •  2
  •   Community Ian Goodfellow    7 年前

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

    zpipe < BIGfile.html > BIGfile.htmlz
    

    例如。

    然后使用Zash的例子,设置一个过滤器来更改头部。这应该为您提供原始的deflate文件,而现代浏览器 probably support .

    要获得压缩文件的另一种方法,请查看使用 pigz 使用zlib(-z)或pkware-zip(-k)压缩选项。测试这些工作是否通过了内容编码集。

        4
  •  0
  •   Javi Stolz    14 年前

    在不直接处理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 */