如何判断js是否闭包编译
How to identify if js is closure compiled
我有一些 javascript 项目的源代码,我想知道其中哪些是使用 Google 的 Closure 编译器编译的。
我认为没有可靠的方法可以知道源代码是否使用 Google Closure Compiler 压缩过。但是,作为一般测试,您可以尝试 re-compress 代码并比较前后结果。这假设使用了简单的优化。
运行 下面的示例和结果 returns 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>
您可以寻找一些 Closure 编译器独有的怪癖:
(1) 闭包编译器将所有 "while" 循环重写为 "for" 循环。所以如果你看到一个 "while" 循环,它没有被 Closure Compiler 优化(它可能仍然被 Closure Compiler 处理,但它没有被优化)
(2) 使用默认优化选项,Closure 编译器在大约 500 个字符处换行。如果平均行长度明显小于或大于该值,则编译器可能未对其进行优化。
(3)一些常量,编译器改写"undefined","true"和"false"分别改写为"void 0"“!0”和“!1”,如果你看到其他的,它没有被 Closure Compiler 优化(但没有告诉你它已经被优化)。
可能存在其他特性,但这取决于您使用的编译器版本。
我有一些 javascript 项目的源代码,我想知道其中哪些是使用 Google 的 Closure 编译器编译的。
我认为没有可靠的方法可以知道源代码是否使用 Google Closure Compiler 压缩过。但是,作为一般测试,您可以尝试 re-compress 代码并比较前后结果。这假设使用了简单的优化。
运行 下面的示例和结果 returns 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>
您可以寻找一些 Closure 编译器独有的怪癖:
(1) 闭包编译器将所有 "while" 循环重写为 "for" 循环。所以如果你看到一个 "while" 循环,它没有被 Closure Compiler 优化(它可能仍然被 Closure Compiler 处理,但它没有被优化)
(2) 使用默认优化选项,Closure 编译器在大约 500 个字符处换行。如果平均行长度明显小于或大于该值,则编译器可能未对其进行优化。
(3)一些常量,编译器改写"undefined","true"和"false"分别改写为"void 0"“!0”和“!1”,如果你看到其他的,它没有被 Closure Compiler 优化(但没有告诉你它已经被优化)。
可能存在其他特性,但这取决于您使用的编译器版本。