如何识别js是否已编译闭包

时间:2016-01-25 08:14:48

标签: javascript google-closure-compiler google-closure

我有一些javascript项目的源代码,我想知道哪些是使用Google的Closure编译器编译的。

2 个答案:

答案 0 :(得分:3)

你可以寻找一些可能是闭包编译器独有的怪癖:

(1)闭包编译器重写所有"而#34;循环为"为"循环。所以如果你看到"而#34;循环,它没有被Closure Compiler优化(它可能仍然由Closure Compiler处理,但它还没有被优化)

(2)使用默认优化选项,Closure Compiler以大约500个字符的形式断行。如果平均线长度明显小于或大于该值,则编译器可能无法对其进行优化。

(3)一些常量,编译器重写" undefined"," true"和"假"被重写为" void 0" "!0"和"!1"如果你看到其他的它没有被Closure Compiler优化(但是没有告诉你它已经被优化了)。

可能存在其他特征,但这取决于您使用的编译器的版本。

答案 1 :(得分:0)

我认为没有一种可靠的方法可以知道源代码是否是使用Google Closure Compiler压缩的。但是,作为一般测试,您可能会尝试重新压缩代码并比较之前和之后的结果。这假设使用了简单的优化。

运行下面的示例,结果返回oiginalSize = 26和compressedSize = 21,因为删除了额外的空格。

有关使用该服务的详细信息,请参阅Closure Compiler Service API Reference。祝你好运!

function compress() {
	var xhr = new XMLHttpRequest();
	xhr.open('POST', 'https://closure-compiler.appspot.com/compile', false);
	xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	xhr.send( 
   		'compilation_level=SIMPLE_OPTIMIZATIONS&' +
   		'output_info=errors&' +
   		'output_info=statistics&' +
   		// 'output_info=compiled_code&' +
   		'output_format=json&' +
   		'js_code=' + encodeURIComponent( document.getElementById('input1').value )
   	);
   	document.getElementById('output1').value = xhr.responseText;
} 
textarea { width:100%; height:2em; padding:0.5em; border:1px black solid; margin-bottom:2em; }
Paste your code and click button<p>
<button onclick="compress()">Compress</button>
<textarea id="input1">
alert(  "hello world"  );
</textarea>
output:
<textarea id="output1"></textarea>