当传输压缩时,为什么要缩小
Why minify when the transport will gzip?
在过去(是的,我真的这么老了),你可以从重命名的zip文件中引用脚本,像这样
<script archive="path/to.jar" src="some.js"></script>
在IE4, NS4和Opera5上支持,具有相同的标记和语义,但已经被扔到数字废品场。为什么?
好的,对于那些对答案感兴趣但又没有兴趣去浏览旧消息线程的人(见下面的评论),它的长和短是,你仅仅通过指定Content-Encoding: gzip
就可以从传输层获得压缩,所以在表示层中支持标记是不合适的,因此它被删除了。这也提高了粒度,因为脚本文件在缓存中是单独的版本。
如果传输层使用gzip,那么最小化的意义是什么?gzip字典标记传递将在网络上实现这一点,而不会产生可怕的调试体验。
我同意串联将提高压缩率。我想一些服务器/浏览器组合可能无法使用gzip,在这种情况下,缩小会有所帮助。
archive
属性
对于任何对这个属性感兴趣的人,DevX在1999年3月23日的每日提示中提到了它。为了保存,此处复制了原文:
ARCHIVE是Internet Explorer 4和Netscape Navigator 4中
<SCRIPT>
标签的新属性,可以加快具有大型JavaScript文件的站点的下载时间。如果要加载多个JavaScript文件和数字签名,那么将它们压缩到单个JAR (Java Archive)文件中会更有效。JAR存档是添加了自描述信息的压缩文件。在JAR文件中,您仍然需要为HTML页面中的每个实例指定一个外部JavaScript文件。
<SCRIPT ARCHIVE="myArchive.jar" SRC="myScript.js"></SCRIPT>
现代浏览器的支持
这不在任何标准轨道中,现代浏览器似乎也不支持该属性。一个简单的特性测试表明:
"archive" in document.createElement( "script" );
结果非常一致:
- 铬:假
- IExplorer:假
- Firefox:假
- 歌剧:假
相关性在现代浏览器中,我们真的不需要这样的功能。我们现在有了更好的编码选项,以及大量连接和最小化多个依赖的构建工具。我们也有像require.js和r.js这样的工具,它们可以打包多个文件来减少HTTP请求。
简而言之,web已经超越了传输压缩依赖项的需要。
同样的问题在2003年W3C的www-html邮件列表中被问到。下面列出了一些关于为什么不再需要像[archive]这样的属性的论据:
- 浏览器现在能够长期缓存以减少未来的HTTP请求
- 浏览器现在能够更好地压缩内容
- 浏览器现在能够持久连接,减少HTTP请求
存档出版物
MSDN有一个名为"基于脚本的安全"的资源,至今仍在引用它。
MDN还有一个关于Mozilla中签名脚本主题的存档资源。
对作者的回复
如果传输层使用gzip,那么最小化的意义是什么?gzip字典标记传递将在网络上实现这一点,而不会产生可怕的调试体验。
可能是浏览器不支持gzip的情况(不太可能,但可能)。在这些情况下,连接/缩小的源要好得多。包括最小化步骤在内的现代构建过程还提供了更细粒度的控制,而gzip可能无法与之抗衡。例如,最小化可以删除冗长的源代码注释。
至于调试体验,您可以始终利用现代浏览器对源映射的支持,这将消除实际调试最小化代码的任何需要。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么这在IE中的工作方式与在Firefox中不同
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- Javascript缩小为什么是false替换为!1和真与!0
- 为什么使用 grunt-contrib-cssmin 会改变我的 css,而它应该只缩小它
- 为什么我不能缩小棱角.js
- 为什么我的窗户一直没有缩小
- 为什么部署(串联、缩小)AngularJS+RequireJS应用程序不工作
- 为什么 jQuery 对话框在淡出时会缩小
- 为什么JS缩小会将1000转换为1E3
- 为什么谷歌分析缩小为:“1*新日期()”
- 为什么浮动位置 元素缩小时元素不移动
- 为什么rjs合并并缩小JS,然后复制所有文件到输出目录
- 为什么我的全局变量在我的javascript文件的缩小版本中是未定义的?
- css和js缩小了为什么我的wordpress站点很慢
- 为什么缩小+gzip使文件大小小于gzip
- 当传输压缩时,为什么要缩小
- 为什么这个滑块脚本在缩小和组合时中断