繁体   English   中英

为什么我们在精简的JavaScript中使用换行符?

[英]Why do we have newlines in minified JavaScript?

我知道一个类似的问题 ,但它是从我问什么我在这里一点点了,所以不要flag为重复。

当您看到jQuery的正式版时 ,为什么过一会儿会有换行符? 我下载了一个副本并删除了所有换行符(除了许可证),它仍然有效。 (我针对Mozilla Firefox,Google Chrome和Opera上的更改运行了整个单元测试套件。)

问题。在Google Chrome浏览器的“查看源代码”中

我知道三个换行符(不算许可证)不会大大降低它的速度,但是,仍然一点点都帮不上忙吗?

我给自己分配了一个小挑战,那就是要从我的JavaScript代码中压缩出每一点性能。

jQuery当前使用 UglifyJS来缩小其源代码。 他们的构建脚本中 ,他们专门将 max_line_length指令设置为32 * 1024

UglifyJS文档max-line-len指令中有此说明;

--max-line-len (默认32K字符)—在32K字符后添加换行符。 当所有代码都在大约670K的一行上时,我已经看到了FF和Chrome的崩溃。 传递–max-line-len 0以禁用此安全功能。

引用Closure编译器常见问题解答

Closure编译器有意每500个字符左右添加一个换行符。 防火墙和代理有时会损坏或忽略行很长的大型JavaScript文件。 每500个字符添加一个换行符可以避免此问题。 删除换行符不会影响脚本的语义。 对代码大小的影响很小,并且编译器优化了换行符的位置,以使压缩文件时的代码大小损失更小。

这通常与任何缩小程序有关。

这些行(不包括许可证)的长度均为30k个字符。 可能是为了避免某些JavaScript解析器死于极长行的错误。 在当今的浏览器中可能不会发生这种情况,但也许某些较旧或更模糊的浏览器具有这种限制。


(下面的旧答案也可能适用,只是在这种情况下不适用)

这可能是因为JSMin ,一个流行的JavaScript minifier将保留线在一定条件下的输出源。 这是因为,例如,如果省略分号,则在Java语言中换行重要。 该文件说:

在省略换行符时更为保守,因为换行符有时被视为分号。 如果换行符位于非ASCII字符,ASCII字母或数字或以下字符之一之前,则不能省略:

 \\ $ _ { [ ( + - 

且其后跟非ASCII字符,ASCII字母或数字或以下字符之一:

 \\ $ _ } ] ) + - " ' 

其他缩小器可能有类似的规则。

因此,这主要是为了防止意外删除换行符(从语法角度而言)。 您想要的最后一件事是缩小的JS将不再起作用,因为缩小器破坏了其语义。

关于»我知道三个换行符(不算许可证)不会大大降低它的速度,但是,一点点的帮助也没有吗?« :当您的服务器使用gzip压缩时,无论如何,两者之间的差异可能无济于事

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM