5

谷歌表示 Zopfli提供了更好的 gzip 功能,并且与所有浏览器兼容(解压缩是相同的,压缩需要更长的时间,但静态文件占用空间会额外减少 5-10%)

所以,我知道您可以为静态文件的 gzip 压缩执行此操作:

<system.webServer>
 <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
 dynamicCompressionDisableCpuUsage="90"
 dynamicCompressionEnableCpuUsage="80"
maxDiskSpaceUsage="100" minFileSizeForComp="2700"
noCompressionForRange="true"
sendCacheHeaders="false"
staticCompressionDisableCpuUsage="100"
staticCompressionEnableCpuUsage="80"    >
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" dynamicCompressionLevel="4" 
          staticCompressionLevel="7" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="application/xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/rss+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="application/xml" enabled="true" />
    <add mimeType="image/svg+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>

</httpCompression>

...

但是你将如何在 web.config 中实现 Zopfli 而不是标准的 GZip 库?

4

4 回答 4

6

您可以使用pigz进行静态压缩,这是一个并行 gzip 替代品,包括 11 级的 zopfli 压缩。

zopfli 可能对动态压缩没有好处,因为压缩额外的百分之几的数据比简单地传输额外的百分之几的数据需要更长的时间。

zopfli 适用于那些压缩一次,然后多次发送或存储并解压缩多次的情况。不适用于压缩一次并解压缩一次的情况。

于 2013-03-06T04:47:35.743 回答
5

Zopfli 压缩很慢,所以我建议在上传静态文件之前先对其进行压缩,最好使用 CDN 和 Zopfli 处理静态文件。

如果您使用的是 .net,请查看我最近在 github 上发布的库

https://github.com/echovoice/libzopfli-sharp

我派生了Stream类,用法很简单

using (MemoryStream compressStream = new MemoryStream())
using (ZopfliStream compressor = new ZopfliStream(compressStream, ZopfliFormat.ZOPFLI_FORMAT_DEFLATE))
{
    compressor.Write(uncompressed, 0, before);
    compressor.Close();
    compressed = compressStream.ToArray(); // here is the compressed data
}

该库在 Nuget 上以 libzopfli-sharp 的形式提供,https ://www.nuget.org/packages/libzopfli-sharp

所以可以使用这个类来为 IIS 创建和注册一个过滤器,但这不是一个好主意,而且会使网站性能变差。

于 2013-10-04T20:06:09.527 回答
1

这个问题是一年多前提出的,但有一些事情发生了变化,这可能会使此页面上的未来登陆者受益:

  1. 首先,重要的是要强调zopfli 创建 gzip 文件。因此,在 web.config(或 .htaccess)中隐含的分析级别,不会有任何 zopfli 感知。

  2. 因为它至少比 DEFLATE/典型的 gzipping 慢一个数量级,所以它不在运行中进行动态压缩,而这正是 IIS 和 Apache 正在做的事情。我们不太可能看到在服务器上实施用于动态压缩的 zopfli 算法。

  3. 您可以提前使用 zopfli,在将资产部署到服务器之前对其进行预压缩。你现在可以做到这一点的一种方法是通过 node.js 包:node-zopfli

现在 Telerik 有了一个简洁的工具,可以告诉您您的资产是否会从 zopfli 中受益,以及受益多少。

zopfli 源代码库在这里。

Pigz是一种实现,Krzysztof Kowalczyk 已将其移植到 Windows

于 2015-01-25T09:15:55.640 回答
0

那还不可能!您应该能够手动预压缩您拥有的任何文件。

目前,zopfli 不是 dll/库,因此您不能使用它来动态压缩内容,除非您能够编写脚本来处理它,但这超出了您的问题范围。

我认为,一旦将 zopfli 转换为库以将其放置在 gzip.dll 的位置或编写包装器来执行此操作,我认为将来有可能。

于 2013-03-05T21:21:07.380 回答