我知道一个similar question,但它与我在这里要求的内容相差无几,所以请不要flag
它是重复的。
当您看到production version of jQuery时,为什么会在一段时间后出现换行?我下载了一份副本并删除了所有新行(除了许可证),它仍然有效。 (我针对Mozilla Firefox,Google Chrome和Opera上的更改运行了整个单元测试套件。)
我知道三个换行符(不包括许可证)不会减慢它的速度,但仍然不是每一点都有帮助吗?
我给自己分了一个小小的挑战,从我的JavaScript代码中挤出一点点性能。
答案 0 :(得分:25)
jQuery currently use UglifyJS缩小其源代码。在their build script中,他们specifically set max_line_length
指令为32 * 1024
:
documentation for UglifyJS可以在max-line-len
指令上说明这一点;
--max-line-len
(默认32K字符) - 在大约32K字符后添加换行符。当所有代码都在大约670K的单行上时,我已经看到FF和Chrome都会呱呱叫。传递-max-line-len 0以禁用此安全功能。
答案 1 :(得分:13)
Closure Compiler故意每500次添加换行符 人物左右。防火墙和代理有时会损坏或忽略 大型JavaScript文件,行很长。每次添加换行符 500个字符可以防止此问题。删除换行符没有 对脚本语义的影响。对代码大小的影响很小,而且 编译器优化换行符位置以使代码大小 文件被压缩时惩罚甚至更小。
这与任何缩小计划有关。
答案 2 :(得分:4)
行(不包括许可证)的长度大约为30k个字符。这可能是为了避免一些Javascript解析器在非常长的行上死亡的错误。这可能不会发生在今天的浏览器上,但也许一些较旧或较为模糊的浏览器会有这样的限制。
(下面的旧答案,也可能适用,但在这种情况下不适用)
这可能是因为JSMin,一个流行的Javascript minifier将在某些条件下保留输出中的换行符。这是因为在Javascript行中,如果省略分号, 是重要的。文档说:
省略换行更为保守,因为换行有时被视为分号。如果换行符在非ASCII字符或ASCII字母或数字或其中一个字符之前,则不会省略换行符:
\ $ _ { [ ( + -
如果它遵循非ASCII字符或ASCII字母或数字或其中一个字符:
\ $ _ } ] ) + - " '
其他缩小器可能有类似的规则。
因此,这主要是防止在语法方面意外删除可能必需的换行符的预防措施。你想要的最后一件事是你的缩小的JS将不再起作用,因为minifier破坏了它的语义。
关于»我知道三个新行(不包括许可证)不会减慢它的速度,但是,仍然不是每一点都有帮助吗?«:当你的服务器使用gzip时压缩差异可能无论如何都是没有意义的。