2011-07-23 53 views
1


我嗅到一些包了我的谷歌Chrome浏览器 - 而我发现:
为什么HTTP是基于文本而不是一些压缩方法?为什么不压缩JS?

  1. HTTP请求发送文本 - 实际发送“GET BLABLABLA”
  2. JS文本形式接收
  3. HTML \ images等以某种压缩方式传输。

我的问题是 - 为什么HTTP和JS传输没有任何压缩?
我认为一个完全形式的HTTP请求可以压缩到大约3〜5个字节,不包括cookies,并且页面选择也被压缩(例如site.com/thisisanicefile.html> site.com/ABC)
另外 - 为什么JS作为纯文本而不是作为一个Tokens数组传递(编程语言在执行之前转换为一个Token数组 - 对于脚本语言也是如此)?
感谢马克 -

回答

10

对于HTTP:好吧,这就是协议的定义。该协议是基于文本的。使其实施起来非常简单,无需担心诸如排序等问题。 (html,javascript,images,...)可以压缩发送,这是浏览器和服务器之间编码“协商”的问题(都需要支持)。请参阅维基百科页面上的HTTP Compression页面,了解它的工作方式。以预处理的形式(某种字节码)传输JavaScript将需要字节码形式在所有浏览器中标准化和实现,并且提供很少的好处。大小差异与压缩,精缩的JavaScript可能不是大恒星(毕竟,你会被发送的信息相同数量的,所以良好的压缩算法应该使两个几乎相同的大小)。

您还需要在您的网络服务器上提供JS代码(另外还有一个构建/部署任务),或者实时编译它(CPU浪费),并且这不会阻止需要用于浏览器上的全面源代码解释器,而不会限制语言(如果前端无法处理JS源代码,则不会在前端生成更多eval /代码)。

+0

你忘了提及你可以gzip javascript。 – Raynos

+3

包含在http内容压缩中。我不认为JavaScript是特殊的 - 它可以像其他任何内容一样被压缩。 – Mat

+0

我想我明白了。谢谢 –

0

...过早的优化是一切罪恶

(C)的根you know who

页眉应该始终为文本 - 只有机构可以gzip压缩。 Js身体也可以gzipped - 看到你的网络服务器设置。

2

HTTP标头从不压缩 - HTTP头压缩没有协议。我想没有必要,它不像标题是100kB +网站的一大部分。

对于单个HTTP请求,其行为取决于服务器配置和客户端。如果客户端不会很高兴地接受gzip /缩小的内容,服务器将不会压缩。如果客户确实这样说,那么服务器可能会选择根据其配置进行压缩。 (例如,对于Apache,您需要如此设置mod_deflate)。

例如,由于服务器已被压缩,服务器不压缩JPEG和PNG是完全合理的。服务器也可能不会选择压缩由PHP处理程序处理的任何内容,而宁愿将其留给处理程序进行压缩。 (例如,如果处理程序提供PDF,它可以压缩,但如果它提供MP3,则不会。)

简短回答:这一切都要看。