使用Google Closure Compiler编译的jQuery

39

有人将jQuery编译为Google新发布的Closure编译器吗?

据报道,代码大小可以大幅减少。如果使用这个编译器编译jQuery,会有什么好处呢?


我想我会等待Resig和他的团队发布新的-min或特殊闭包版本。我不想压缩库,发现特定功能无法正常工作或未按预期工作。 - Tom
我的第一个(也是唯一的)踩票。如果问题的提问者不接受答案(或至少说明所提供的答案有何不可接受),那么该问题就不值得被点赞。一个好问题的一部分在于知道被接受的解决方案是什么。 - Karl
10个回答

27

28
指出现在jQuery 1.4已经发布,漏洞被修复,Closure Compiler现在是jQuery的主要缩小器。 - Matchu
1
只是一个快速的提示:事实证明调用闭包编译器相当简单。除此之外,它还是一种优化编译器,可以删除死代码并通过静态分析提供有用的编译时警告。 - Luís Oliveira

12

我尝试使用jQuery jQuery 1.3.2

jQuery-1.3.2.min.js     57254 Bytes
jQuery closure compiler 49730 Bytes
-----------------------------------
Reduced by               7524 Bytes
Saved 13.31% off the original size
Saved 10.87% off the gzipped size

减少了约7KB的大小

但它还报告了15个警告,而且我也没有测试它是否仍然可用。


7

闭包编译器可以消除你实际上没有使用的代码。典型的网页只会使用 jQuery 的一小部分功能,因此将你的代码与完整版本的 jQuery 编译在一起,最大的好处就是可以使你受益。


6
当然,如果使用jQuery的代码被缓存在用户计算机上,那么你将失去任何好处。 - Nosredna
1
实际上,上次我检查时,Closure 并没有从 jQuery 中删除未使用的函数,我认为这是因为它们实际上并没有被定义为单独的函数。 - DisgruntledGoat
如果是这样,那么当您仅编译jQuery库时,Closure Compiler会删除几乎所有的代码吗? - Petr Peller
这是意图,但高级闭包编译器现在远非完美。 - David Mulder

6

关闭高级优化:

  • jquery-1.3.2.min.js: 57254字节
  • jquery-1.3.2.closure.js 55346字节(减少了3.4%)
  • jquery-1.3.2.min.js.gz: 19680字节
  • jquery-1.3.2.closure.js.gz: 18666字节(减少了5.2%)

开启高级优化后:未经修改无法正常工作。即使已导出所有可找到的内容,也仍然无法完全正常工作。此时代码已增至53466字节(压缩后为18785字节),比未开启高级优化的闭包代码还要大,因此看起来并不是一个成功的方案。


7
高级优化选项并不是为了优化文件大小,而是为了提高执行速度(它试图更改您的代码以使其运行更快,而不是下载更快)。 - Kekoa
1
@Kekoa,根据我在网上印刷品上的阅读,高级优化和编译器的主要目标似乎是文件大小(和下载速度)。 - hyperslug
较小的文件大小通常(但并非总是)会导致更快的代码。死代码删除和内联服务于两个目的。 - Blaise
如果调用次数很多,内联并不总是能减小文件大小。 - SOFe

5

从jQuery 1.4开始,Google的Closure Compiler被用作jQuery发布的默认缩小技术。然而,jQuery只使用了SIMPLE_OPTIMIZATIONS设置。jQuery团队没有计划支持ADVANCED_OPTIMIZATIONS


2
然而,我们相信我们可以做得更好,并希望为任何用户提供自动化方式来创建一个最佳化的文件,其中包括应用程序代码和仅需要的jQuery部分。特别是,我们正在与Google Closure Compiler团队合作,以查看是否可以使用其ADVANCED_OPTIMIZATIONS选项。随着进展的情况,我们将会有更多的信息。 - David Mulder

2

出于好奇,我使用YUI和Closure缩小了最新的Prototype和jQuery库,并进行了SlickSpeed测试。 您可以在此运行测试

正如其他人所指出的那样,使用ADVANCED_OPT编译不起作用,但如果有人愿意做这项工作,我将很乐意将结果添加到SlickSpeed测试中。


1

闭包只是最小化和重命名变量吗?jQuery已经有.min版本了。再次使用闭包进行缩小可能会产生最小的帮助,同时也可能存在潜在的危险。

编辑:我刚刚做到了。

Compilation was a success!

Original Size:  55.91KB (19.28KB gzipped)
Compiled Size:  54.05KB (18.28KB gzipped)
Saved 3.34% off the original size (5.18% off the gzipped size)

这是在已经挖掘出的版本之上。这里有一个演示:http://closure-compiler.appspot.com/home


6
从理论上讲,你可以将你的JavaScript与jQuery混合使用,并让Closure重命名所有的.click.each等,以获得额外的节省。 - Tinister
@Tinister,你会怎么做呢?那样的话,Closure不就需要解析你的HTML页面来查看哪些被调用了,哪些没有被调用了吗? - Ted
@Ted,你可以将你的jQuery代码全部放在一个文件中,并对整个代码使用Closure Compiler进行编译。 - JasonWyatt
12
你的HTML页面中没有添加任何JS代码。 - hobbs
1
Closure Compiler 不仅仅是最小化和重命名。如果您编译一个大型 JS 程序,您会发现它是重新编译的。它会在合适的地方内联代码。它会重新组织复杂的条件语句等。 - Nosredna
显示剩余4条评论

1

我使用Closure(采用ADVANCED_OPTIMIZATIONS)对托管的单页面网站进行了javascript代码压缩,相比于YUI Compressor,获得了显著的大小节省。因此,我开始尝试缩小该站点的jQuery库,因为它肯定没有使用整个jQuery库。

每次运行jQuery时,编译器都会发出警告,主要指出未使用的代码部分。即使如此,编译后的代码也无法工作。我看到的主要问题是编译器没有正确导出东西。通过将函数附加到窗口对象上,我可以轻松地从自己的代码中导出函数,但我还没有能够在jQuery中做到这一点。

好消息是,John Resig已经开始尝试Closure。我猜想我们很快就会看到兼容性的新版本发布。


1

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接