首页 > 下面这段代码是什么啥意思?

下面这段代码是什么啥意思?

下面这段代码是什么意思,以及为什么这么写就能减少编译后的代码尺寸呢?有知道的吗,本人对CC不熟悉。

// A few optimizations for Google Closure Compiler
// will save us a couple kb in the release script.
var object = Object, array = Array, regexp = RegExp,
    date = Date, string = String, number = Number,
    math = Math, Undefined;

Google Closure Compiler 會把局部變量名稱縮短,但不會把全局變量縮短。(這也就是閉包編譯器的字面意思)

那段代碼就是爲了把全局變量變成局部變量。

其實有一種壓縮方式可以自動完成這一工作

甚至連 function 這樣冗長的關鍵字也可以壓縮。

比如:http://tool.lu/js/ 的「加密」(實際上是壓縮)

Object.prototype.hi = function() { return function() {} }

其中 function 出現了兩次

變成

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1.2.3=0(){4 0(){}}',5,5,'function|Object|prototype|hi|return'.split('|'),0,{}))

代碼被壓所成

1.2.3=0(){4 0(){}}

剩下的部分是「解密」(實際上是解壓縮)函數

其中全部代碼中只出現了一次 function。

這是 closure compiler 無論如何也做不到的。

所以我覺得,那段代碼中的做法,手動爲編譯器優化,除非代碼量較小,否則意義不大。


注释中写了for Google Closure Compiler

这玩意一般用来压缩,比如

var a_very_log_variable_name;
var a_very_long_function_name = function() {
    do_sth_with(a_very_log_variable_name);
}
a_very_long_function_name();

压缩之后,所有的变量名,都被改写成尽可能短的字符串以减小体积:

var a;var b=function(){do_sth_with(a)};b();

那么问题来了,全局变量怎么压缩?这玩意不是我自己声明的,名字不是说改就能改的,如果我的脚本中用到同一个全局变量很多次,又不能压缩,怎么办?

起个别名不就行了? 新技能get√

利用重命名方式压缩的时候 ,只需要重命名别名

var object = Object;
var aaaaa = new object();
var bbbbb = new object();
var ccccc = new object();
var ddddd = new object();
var eeeee = new object();

被压缩为

var o=Object,a=new o(),b=new o(),c=new o(),d=new o(),e=new o();

普通写法

var begin=new Date();
var end=new Date();
console.log(begin.getTime()-end.getTime());

压缩后

var a=new Date();
var b=new Date();
console.log(a.getTime()-b.getTime());

这里的写法

var date=Date;
var begin=new date();
var end=new date();
console.log(begin.getTime()-end.getTime());

压缩后

var d=Date;
var a=new d();
var b=new d();
console.log(a.getTime()-b.getTime());
【热门文章】
【热门文章】