javascript - 下面这段代码是什么啥意思?
迷茫
迷茫 2017-04-10 14:52:22
[JavaScript讨论组]

下面这段代码是什么意思,以及为什么这么写就能减少编译后的代码尺寸呢?有知道的吗,本人对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;
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
天蓬老师

普通写法

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());
PHP中文网

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();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号