缩小JavaScript中的评论会发生什么?

问题描述:

缩小版中发生了什么评论 JavaScript文件?浏览器如何知道评论的结尾是什么时候一切都被压缩为一行?就拿这个小例子,我有这样的谷歌的跟踪代码:缩小JavaScript中的评论会发生什么?

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

缩小的版本拉一切都变成一条线

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

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

+2

您使用的是什么缩小器?缩小器应该尽可能多地消除字符,尤其是*诸如评论之类的东西。 (以及你的案例中的空间。) – pimvdb 2012-02-27 15:53:34

+0

你用什么来缩小脚本? – JaredPar 2012-02-27 15:53:44

+2

取决于缩小器,但我会认为一个好的缩小器会完全排除注释。 – jondavidjohn 2012-02-27 15:53:54

缩小镜去掉注释或插入换行符。例如,Closure Compiler's FAQ说:

我可以一起使用关闭编译器与其他JavaScript minifiers?

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

记住关闭编译器和其它minifiers可能有关于传入码的预期。例如,删除注释的缩小器可能会移除其他工具所需的许可证或注释信息。

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

我有版权声明或开源许可证文本必须出现在我的源代码中。我如何让Closure编译器将这些文本剥离出来?

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

由于某些解释器的源代码解析器在真正长的行上崩溃或执行得非常慢,因此缩小器也会偶尔断行。

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

之前,因为我们正在处理的块,有一个错误消息如何能一行包括很多的限制。但是现在错误信息包含整条线。 如果你有很长的线路和很多的错误,这是一个高内存使用,尤其是因为我们调用js_DeflateString()错误消息字符串,导致它的两个副本(一个由jschar s,另一个由char S)。

在相关网站上,包含122,895个字符的行发生了大量错误,导致超过1G的char s(每个char!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"]); 

的意见是两者都删除。

+0

我敢打赌,客户端的某个人试图通过手工“缩小”代码,并以此结束。谢谢您的帮助。 – Rondel 2012-02-27 16:19:46