Underscore JS源代码 - 这个节省字节是多少?

时间:2015-06-01 19:51:24

标签: javascript underscore.js minify

在阅读commented underscore source code时,我在开头遇到了这一行:

  

在缩小版(但不是gzip)中保存字节:

  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;

这里到底做了什么 - 通过避免换行来节省字节数?

对我而言,这似乎相当模糊,特别是因为它是该技术的唯一出现,这让我相信它可能还有更多。

1 个答案:

答案 0 :(得分:5)

var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;

equivalent

var ArrayProto = Array.prototype;
var ObjProto = Object.prototype;
var FuncProto = Function.prototype;

保存的字节与缺少的换行符相关,因为如果代码中存在它们,缩小器将删除它们。

通过声明一个变量来替换Array.prototype,并假设minifier将用一个字母的变量名替换变量名(这很可能),每次出现Array.prototype时你会得到14个字符你用ArrayProto替换。缩小器当然不能更改Array.prototype,因为它不会以不同的名称找到。

如上所述,对于压缩代码来说,增益是可疑且难以测量的,因为压缩在重复文本上更有效。

这是微观优化。当您使用很多可以重命名的表达式时,您可以尝试将其分配给变量并重用该变量,但仅当您测量增益时,如果文件轻一些字节较重(如果您确信自己不会妨碍可读性和可维护性,那么很少见(但请注意,通过使用替换表达式的名称也可以提高可读性)。

您可以在更常见的模式中找到相同的伪装优化:

(function(window, undefined){
   // window and undefined are replaced by one letter
   // names by the minifier
})(window, undefined);