缩小JavaScript中的注释会发生什么?

时间:2012-02-27 15:52:07

标签: javascript minify

缩小 JavaScript文件中的评论会怎样?浏览器如何知道评论的结尾何时将所有内容压缩到一行?举个小例子,我有像这样的Google跟踪代码:

//Google tracking
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 

缩小版将所有内容拉成一行

// Google tracking var _gaq = _gaq || []; _gaq.push(['_setAccount', '123456']);

还有更多的陈述,但是当我在编辑器中检查JavaScript代码时,它看起来像一个巨大的评论(或多或少)。是否有隐藏的字符告诉浏览器何时结束评论或者此代码是否未被执行?

2 个答案:

答案 0 :(得分:3)

Minifiers剥离注释或插入换行符。例如,Closure Compiler's FAQ说:

  

我可以将Closure Compiler与其他JavaScript缩小器一起使用吗?

     

是。 Closure Compiler读入任何有效的JavaScript并生成有效的JavaScript,因此您可以在通过不同的minifier运行文件之前或之后将Closure Compiler应用于JavaScript文件。

     

请记住Closure Compiler和其他minifiers可能对传入代码有所期望。例如,删除注释的minifier可能会删除其他工具所需的许可证或注释信息。

有时你真的需要一个评论,在这种情况下他们会换行。

  

我的版权声明或开源许可文本必须出现在我的源代码中。如何让Closure Compiler不要删除此文本?

     

Closure Compiler支持JSDoc @license标记。将@license标记添加到任何JSDoc注释以保留编译器输出中的注释。有关更多信息,请参阅为Closure Compiler注释JavaScript。

Minifiers也偶尔会破坏行,因为一些解释器的源代码解析器在很长的行上崩溃或执行速度非常慢。

https://bugzilla.mozilla.org/show_bug.cgi?id=634444

  

以前,因为我们处理的是块,所以错误消息可以包含多少行限制。但现在错误消息包含整行。 如果你有很长的行和很多错误,这是一个高内存使用的方法,特别是因为我们在错误消息字符串上调用js_DeflateString(),导致它的两个副本(一个制作jschar的{​​{1}},另一个由char s组成。

     

在相关网站上,大量错误发生在包含122,895个字符的行上,导致超过1G的char s(每个char 3个字节!)被放入错误消息中。< / p>

答案 1 :(得分:3)

JavaScript单行注释以第一个到达的换行符结束。缩小器将在删除换行符之前删除注释,以便它不会破坏您的代码。

例如,如果您粘贴

//GOOGLE TRACKING
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 

进入 Closure Compiler 并进行简单的优化

var _gaq=_gaq||[];_gaq.push(["_setAccount","123456"]);

通过高级优化,您可以获得:

var a=a||[];a.push(["_setAccount","123456"]);

两者都删除了评论。