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

Ron*_*del 6 javascript minify

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

//Google tracking
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 
Run Code Online (Sandbox Code Playgroud)

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

// Google tracking var _gaq = _gaq || []; _gaq.push(['_setAccount', '123456']);
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*uel 6

缩小器去除注释或插入换行符。例如,Closure Compiler 的 FAQ说:

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

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

请记住,Closure Compiler 和其他压缩器可能对传入的代码有预期。例如,去除注释的压缩器可能会删除另一个工具所需的许可证或注释信息。

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

我的源代码中必须出现版权声明或开源许可文本。我如何防止 Closure Compiler 剥离此文本?

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

Minifiers 也倾向于偶尔断行,因为一些解释器的源代码解析器在非常长的行上崩溃或执行非常缓慢。

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

以前,因为我们处理的是块,所以错误消息可以包含的行数是有限制的。但是现在错误消息包含整行。 如果你有很长的行和很多错误,这是一个高内存使用的秘诀,特别是因为我们调用js_DeflateString()了错误消息字符串,导致它的两个副本(一个由jschars 组成,另一个由chars 组成)。

在有问题的站点上,在包含 122,895 个字符的一行上发生了大量错误,导致超过 1G 的chars(每个 3 个字节char!)被放入错误消息中。