// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @exclude_default_externs true
// @js_externs var console = {log: function(){}};
// @output_file_name default.js
// ==/ClosureCompiler==
/** @constructor */
function Test(){};
Test.prototype['action'] = function(){
console.log('Hello');
return this;
}
var test = new Test();
如果我添加以下行:
test['action']()['action']()['action']();
并编译它我得到这个大小:
113 bytes (101 bytes gzipped)
如果我用这个等效代码替换该行:
test['action']();
test['action']();
test['action']();
我得到这个尺寸:
123 bytes (108 bytes gzipped)
我希望闭包编译器能够识别出,因为我的函数返回this
,它可以将调用链接到action
(如何在第一次测试中完成)并获得更小的结果。有没有办法注释上面的代码,以便Closure Compiler能够进行这种优化?
注意:大小的差异是由链接引起的。输出的差异如下:
链接:
(new a).action().action().action();
没有链接:
var b=new a;b.action();b.action();b.action();
答案 0 :(得分:1)
有一个编译器传递:
但默认情况下未启用。它没有为我们测试过的项目提供任何保存,但您可以尝试启用它。它由Compiler的Java API中的“CompilerOptions #setChainCalls”方法控制。