是否有任何压缩算法 - 有损或无损 - 专门用于处理真实世界(杂乱无效)的HTML内容?
如果没有,我们可以利用什么特性来创建这样的算法?潜在的性能提升有哪些?
另外,我不是要问这个问题(通过Apache或任何其他服务器),尽管这当然很有趣,但要存储和分析它。
更新:我不是指GZIP--这是显而易见的 - 而是一种特别的算法,旨在利用HTML内容的特性。例如,可预测的标记和树结构。
答案 0 :(得分:3)
我不知道“现成的”压缩库 明确针对HTML内容优化。
然而, HTML文本应该可以很好地压缩通用算法(请阅读本答案的底部以获得更好的算法)。通常, Lempel-Ziv 的所有变体在类似HTML的语言上都表现良好,这是由于特定语言习语的高度重复性; GZip,经常被引用使用这种基于LZ的算法(LZ77,我认为)。
可能改进这些通用算法的想法是使用最常见的html标记和模式来填充LZ类型的循环缓冲区。以这种方式,我们通过使用来自这种模式的第一个实例的引用来减小压缩大小。这个收益对较小的html文档特别敏感。
一个互补的,类似的想法,是让压缩和解压缩方法暗示(即不发送)LZ-x算法的其他压缩算法的信息(比如LZH等情况下的哈夫曼树),具有特定于典型HTML的统计数据,小心地从字符中排除,计算由引用编码的字符的[统计加权]实例。这样一个过滤后的字符分布可能会比完整的HTML文本更接近普通英语(或目标网站的国家语言)。
与上述[受过教育的,我希望]猜测无关,我开始在网上搜索有关此主题的信息。
'由弗罗茨瓦夫大学的PrzemysławSkibiński发现2008 scholarly paper (pdf format)。该论文的摘要表明比GZIP提高了15%,压缩速度相当。
我可能正在寻找错误的地方。似乎没有太大的兴趣。可能只是相对于简单或适度调整的通用算法的额外增益被认为不足以保证这种兴趣,即使在具有Web功能的手机的早期(当带宽非常高时)。 )。
答案 1 :(得分:2)
gzip
压缩是否不足以满足您的需求?它为您提供大约10:1的压缩比,不仅包含HTML内容,还包含,还包含JavaScript,CSS等。< / strong>文件,并且在大多数服务器或反向代理(例如Apache's mod_deflate
,Nginx's NginxHttpGzipModule
等)和所有现代浏览器上都可用(您可以指示Apache和Nginx跳过基于特定浏览器的压缩在User-Agent
上。)
你会惊讶于gzip
压缩达到最佳状态。 有些人建议minifying您的文件;但是,除非您的文件包含大量注释(缩小器可以完全丢弃,即您可能称之为“有损”) - 但是您可能不想对HTML进行任何操作,除非您确定您的<script>
或<style>
标记都不在HTML评论<!-- -->
内以容纳antediluvian浏览器),请记住,缩小通过类似于(但更有限)的技术实现其大部分收益{ {3}} - 所以希望缩小的文件比gzip
ped原始文件更大或更大(特别是对于HTML,你坚持使用W3C的标签和属性,并且只有gzip
可以帮助您),并且 gzip
ping一个缩小的文件将比原始文件{/ 1}提供最小的收益(同样,除非原始文件包含许多注释,可以被缩小器安全地丢弃。)
答案 2 :(得分:1)
关于我愿意在HTML内容中处理的唯一“有损”,凌乱与否,是空白扁平化。这是高容量网站对其内容执行的典型发布后步骤,也称为展平。
您还可以使用YUI压缩器压缩大型Javascript库,它将所有Javascript变量重命名为短名称,删除空格等。对于使用ExtJS,Dojo等工具包的大型应用程序非常重要。
答案 3 :(得分:0)
如果我正确理解你的问题你需要的是gz压缩,这可以很容易地用Apache。
答案 4 :(得分:0)
不,没有任何特定于HTML的压缩算法,因为通用的压缩算法已证明是足够的。
潜在的收益来自于提前了解HTML页面的可能元素 - 您可以从预定义的字典开始,该字典不必是压缩流的一部分。但这并不会带来明显的好处,因为压缩算法在动态选择常见的子表达式方面非常擅长。
答案 5 :(得分:0)
您通常会使用像gzip这样的常用算法,大多数浏览器都会通过HTTP协议支持这种算法。 Apache documentation显示了如何在不破坏网站浏览器支持的情况下启用mod_deflate。
此外,您可以minimize static HTML files(或动态执行此操作)。
答案 6 :(得分:0)
使用S表达式,为每个标签保存一些字符:)
答案 7 :(得分:0)
您可以将每个唯一分组(即标记和属性)视为符号,确定最小符号数并使用Shannon熵重新编码;这将生成一个具有最大压缩的大块字节。我会说这可能不比gzip好多了。
答案 8 :(得分:0)
documentation是一种专门的HTML /英语压缩算法。
来源:Brotli
与大多数通用压缩算法不同,Brotli使用a 预先定义的120千字节字典。字典包含 13000个常用词,短语和其他子串派生而来 文本和HTML文档的语料库。[6] [7]预定义的字典可以 为短数据文件提供压缩密度提升。
答案 9 :(得分:-1)
Gzip通常用于压缩网页(例如:HTML),但某些版本的IE不支持它。
答案 10 :(得分:-1)
通过一些HTML minificator / obfuscator运行你的代码,尽可能删除尽可能多的标记,然后让你的web服务器用gzip压缩它。