基于文本内容的压缩

数据压缩

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

为了解释数据压缩的原则,我们创建一个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的样本操作,压缩后如下

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

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

来源:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/optimize-encoding-and-transfer?hl=en
时间: 2024-11-05 16:11:30

基于文本内容的压缩的相关文章

HttpClient与APS.NET Web API:请求内容的压缩与解压

首先说明一下,这里的压缩与解压不是通常所说的http compression——那是响应内容在服务端压缩.在客户端解压,而这里是请求内容在客户端压缩.在服务端解压. 对于响应内容的压缩,一般Web服务器(比如IIS)都提供了内置支持,只需在请求头中包含 Accept-Encoding: gzip, deflate ,客户端浏览器与HttpClient都提供了内置的解压支持.HttpClient中启用这个压缩的代码如下: var httpClient = new HttpClient(new Ht

基于互联网内容的中文分词小实验

分词对于搜索引擎,输入法输入提示,语音识别等其它人机交互系统等都很有用.互联网的海量信息为分词研究提供了大量的,动态更新的原始资料库.很多互联网公司都有基于互联网内容的分词系统.并且采用HADOOP等分析大量数据.这些听上去很高大上,但是仔细想想基本原理应该是比较容易理解的,我们每个程序员也很容易可以研究这个领域.所以做了一个简单的POC实验. 首先写一个Spider,从互联网页面抓取内容.因为只是简单实验,我只抓取一个页面,没有做递归抓取链接页面.抓取内容过滤掉HTML标签留下纯文本. 第二部

HTTP 传输内容的压缩

一.HTTP压缩和内容编码的区别 HTTP压缩,在HTTP协议中,其实是内容编码的一种. 在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码. 从而达到压缩的目的. 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容. 所以我们说HTTP压缩,其实就是HTTP内容编码的一种. 所以大家不要把HTTP压缩和HTTP内容编码两个概念混淆了. 二.HTTP压缩 HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法. H

基于文本图形(ncurses)的文本搜索工具 ncgrep

作为一个VIM党,日常工作开发中,会经常利用grep进行关键词搜索,以快速定位到文件.如图: 利用grep进行文本搜索 但是,这一过程会有两个效率问题: 展示的结果无法进行直接交互,需要手动粘贴文件路径在打开 展示的结果没有进行分组,直接将结果罗列出来 可想而知,当搜索的内容结果集比较大时,可谓痛苦. 那可以用Vim中的Ag插件进行搜索啊? 是的,但他只解决了交互的问题.仍然没有解决结果集分组分类的痛点. 在vim下利用ag进行文本搜索 思路 在使用Eclipse等IDE进行文本全局搜索时,在加

利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签

当下人工智能是真心的火热呀,各种原来传统的业务也都在尝试用人工智能技术来处理,以此来节省人工成本,提高生产效率.既然有这么火的利器,那么我们就先来简单认识下什么是人工智能吧,人工智能是指利用语音识别.语义理解.图像识别.视觉处理.机器学习.大数据分析等技术实现机器智能自动化做出响应的一种模拟人行为的手段.而我们这里介绍的Magpie则属于人工智能领域里语义理解.机器学习中的一个具体的实现技术. 前述 近期因为工作原因,需要从来自于客户聊天对话的文本中进行用户行为判断,并对其打上相应的标签.而我需

获取WebView里的网页文本内容

获取WebView里的网页文本内容,能够採用例如以下方法: public class ComJSInterface { public void loadHtmlContent(String content) { Log.d("comJs", "html:" + content); } } mWebView.addJavascriptInterface(new ComJSInterface(), "comjs"); mWebView.loadUrl

逃的过初一逃不过十五之三个输入框文本内容检测的实现及测试

上周偷懒来着,就没有完成EditBox的实现,来进行测试...终于,这周逃不过了,老师布置的任务是完成三个文本框的输入并同时检测文本内容... 题目要求如下: 允许1到6个英文字符或数字,按OK结束 有效等价类: 长度:1到6:字符:a-z,A-Z,0-9 无效等价类:长度:0,7:字符:英文.数字以外字符,控制字符,标点符号等 略有不同的地方是这回要求三个文本框同时输入内容,点击OK之后同时对三个文本框的内容进行检测,并输出检测结果. 好~偷懒考虑,我就选择了比较好用的JAVA进行实现,主要原

win8不通过新打开窗口进行打开和保存文件,点击即显示文本内容,点击即保存文件

前面的一篇博客讲到通过打开新窗口进行打开和保存文件,这一篇则重点介绍怎样一步到位来进行打开和保存文件(这里还以.txt文本文件为例). 我们要打开.txt文本文件,无非是想要里面的文本内容,并且把其显示到页面里罢了,那我们能不能直接点击按钮就让文件的内容自动显示到页面上............ 而不需要经过打开新窗口这一步骤呢 同样,我们点击保存按钮,能不能就直接给文件命名为自己想要的名称,而且直接保存到自己想要的位置或者文件里........ 而不经过打开新窗口定位某一个具体的文件夹下这一步骤

Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小

最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小 /**   * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小   * @author yzp   */   public class AutoFitTextView extends TextView {       private Paint mTextPaint;       private float mTextSize;          public AutoFitTextView(Context