Underscore JS 源代码——这是如何节省字节的?

Underscore JS source – How is this saving bytes?

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

Save bytes in the minified (but not gzipped) version:

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

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

对我来说这似乎相当晦涩,尤其是因为它是该技术的唯一出现,这让我相信它可能还有更多。

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,并假设缩小器将用一个字母的变量名替换变量名(这很可能),您每次出现 [=13= 都会获得 14 个字符] 替换为 ArrayProto。缩小器当然不能更改 Array.prototype,因为找不到不同的名称。

如前所述,gzipped 代码的增益是可疑的且难以衡量,因为压缩对重复的文本更有效。

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

您在更常见的模式下发现了相同的优化:

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