如何实现zopfli以获得更好的gzip压缩?

Nic*_*icy 4 compression asp.net asp.net-mvc gzip web-config

Google表示 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>
Run Code Online (Sandbox Code Playgroud)

...

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

Mar*_*ler 6

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

zopfli可能不会对动态压缩有所帮助,因为压缩数据的额外几分之一所需的时间要比传输额外几个百分点的数据要多得多.

zopfli适用于某些东西被压缩一次然后多次发送或存储并解压缩多次的情况.不适用于压缩一次并解压缩一次的情况.

  • 它只是将输入分成块,默认为128k但用户可选,用前一个块的32K字典压缩每个块(以便不影响压缩),然后组合压缩数据并将其写入输出.还对每个块进行CRC计算,其中CRC组合以计算总CRC. (3认同)

art*_*ker 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
}
Run Code Online (Sandbox Code Playgroud)

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

因此,可以使用此类创建和注册IIS筛选器,但这将是一个坏主意,并使网站性能更差。