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;
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);
在通读 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;
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);