在阅读commented underscore source code时,我在开头遇到了这一行:
在缩小版(但不是gzip)中保存字节:
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
这里到底做了什么 - 通过避免换行来节省字节数?
对我而言,这似乎相当模糊,特别是因为它是该技术的唯一出现,这让我相信它可能还有更多。
答案 0 :(得分:5)
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
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);