闭包编译器可以使用链接作为缩小技术吗?

时间:2013-06-07 03:38:03

标签: javascript google-closure-compiler chaining

// ==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();

1 个答案:

答案 0 :(得分:1)

有一个编译器传递:

https://code.google.com/p/closure-compiler/source/browse/src/com/google/javascript/jscomp/ChainCalls.java

但默认情况下未启用。它没有为我们测试过的项目提供任何保存,但您可以尝试启用它。它由Compiler的Java API中的“CompilerOptions #setChainCalls”方法控制。