基于文本内容的压缩

数据压缩

减少不必要的资源加载之后,我们将剩下的资源进行压缩。

为了解释数据压缩的原则,我们创建一个txt文本,内容如下:

# Below is a secret message, which consists of a set of headers in
# key-value format followed by a newline and the encrypted message.
format: secret-cipher
date: 04/04/14
AAAZZBBBBEEEMMM EEETTTAAA

现在200字节,怎样压缩?

  1. 注释方便程序员的阅读和理解,但是对于实际信息没有任何帮助,所以删除之。
  2. 我们可以用一种更加有效的方式编码headers(上例中也就是format和date)——我们不知道是不是所有的消息都有format和date类型的头部,如果是的话,我们可以将其转化成ID来表示相应的意思。
  3. 我们可以将重复的内容压缩的更加高效,例如:将“AAA”变成"3A",或者是三个A的序列等。

使用我们上面的技术压缩之后变成了下面这样的:

format: secret-cipher
date: 04/04/14
3A2Z4B3E3M 3E3T3A

上面只有56个字节,意味着我们压缩了72%。

上面解释了压缩的原则和压缩的基本原理。针对不同的压缩内容有不同的压缩技术,不同的压缩技术有不同的压缩算法。让我们开始吧。

极简化: 预处理和针对特定内容优化

不影响实际意义的情况下减少大小:

<html>
  <head>
  <style>
     /* awesome-container is only used on the landing page */
     .awesome-container { font-size: 120% }
     .awesome-container { width: 50% }
  </style>
 </head>

 <body>
   <!-- awesome container content: START -->
    <div></div>
   <!-- awesome container content: END -->
   <script>
     awesomeAnalytics(); // beacon conversion metrics
   </script>
 </body>
</html>
  • 将各种类型注释都去除,CSS (/* … */), HTML (<!-- … -->),和 JavaScript (// …)注释.
  • 将两个相同个css类样式的定义合并成一个,不影响表现效果,还减少了文本大小.
  • 空格 (空格键和tab键产生的空格) 去除。

<html><head><style>.awesome-container{font-size:120%;width: 50%}
</style></head><body><div></div><script>awesomeAnalytics();
</script></body></html>

上面将内容从406字节减少到150字节,虽然压缩后的代码变得不可读,但是我们可以将原来的代码设置成“开发者版本,将压缩后的代码发布到网站上。

使用GZIP进行文本压缩

 

  • GZIP 基于文本内容( CSS, JavaScript, HTML)压缩表现的最好:
  • 所有现代浏览器都只是GZIP压缩,并且给自动请求它
  • 你的服务器需要设置来允许GZIP压缩

查看HTML Boilplate项目,包含了 sample configuration files,展示了主流服务器设置允许GZIP的样本操作,压缩后如下

DevTools demo of actual vs transfer size

打开Chrome开发者工具下Network面板下的“Size/Content”:Size表示传输时候的文件大小,content表示没有压缩的文件大小。

 

虽然大部分网站都会进行自动压缩,但是有些CDN需要特别注意。所以,使用这个网站来进行检测吧。

原文地址:https://www.cnblogs.com/RachelChen/p/5452204.html