2013-10-30 55 views
2

对于某些javascript包,我只能得到缩小/ uglified文件。我需要将它们与我的其他JavaScript文件结合起来,并用google闭包编译器进行编译。在闭包编译器中连接和编译uglified javascript

我的问题是:

是否最好通过,而不是变丑一个原始unminified javascript来关闭编译器? (特别是与高级优化模式。)

由于许多JavaScript库本身提供缩小版本(如jQuery和angularjs),我是否需要担心,如果我在另一个缩小任务(uglify或封闭编译)中包含这些脚本。或者我应该将它们单独出来并仅将它们连接起来?

+0

如果浏览器能够理解缩小的脚本,那么声称是JS“编译器”的工具也应该如此。唯一可能出现的问题是,如果不同缩小脚本使用相同名称的全局变量...因为缩小通常包含重命名变量,以便像“a”,“b”等可能发生的“短”名称。但好的脚本不会使用全局变量,对吧? – CBroe

回答

2

如果微优化是你的事情,你可能想看看几个 minifiers,看看哪个是最适合你的代码库。主要的有UglifyJS,Google Closure Compiler和ESMangle。有一个nice comparison on the Uglify website。通过几个缩小器运行代码可能看起来过度杀伤,但如果它产生更好的结果,那么为什么不呢。 :-)

如果你传递了一些已经被缩小的东西,缩小器并不关心;作为一个例子,我在生产中使用了r.js优化器,并将我的未分化的源代码和缩小的jQuery等连接起来,然后整个分析。

你不需要真的担心提醒库,它所要做的就是在构建步骤中增加更多时间,所以如果它花费的时间太长,那么你可以从缩小器中分离出库并简单地连接它们。

+1

这对Closure编译器来说确实不是这样。 Closure编译器的好处(包括类型检查,静态分析和死代码消除)不仅仅是缩小。通过它运行已经缩小的代码并不是真正为它设计的,也不会得到很好的结果。 –

1

有取决于库两个路径:

  1. 如果库提供了unminified源,它是已知与ADVANCED_OPTIMIZATIONS那么最好的选择是在将它作为一个源文件兼容。此选项可以从库源以及源代码中获得无用代码消除的好处。

  2. 如果库仅提供缩小的源代码或已知与ADVANCED_OPTIMIZATIONS不兼容,那么最好的选择是使用库的extern编译代码。为了尽量减少请求的数量,您仍然应该将结果连接在一起。虽然你可以使用编译器的WHITESPACE_ONLY级别,但它可能不是最好的工具。

当然,将库与源结合起来可以最大限度地减少请求,但同时也会使使用CDN进行库托管的任何缓存益处无效。