jQuery使用Google Closure Compiler编译
有没有人编译jQuery针对Google新发布的Closure编译器?
据报道,代码大小节省了很多。 我很好奇jQuery是如何编译的。
John Resig在试图编译jQuery 1.4的夜晚时报告了一个recursion函数的错误,所以有几个问题需要解决。 我不会使用与Closure编译器一起编译的jQuery,但不确定它是否通过了jQuerytesting平台。
http://code.google.com/p/closure-compiler/issues/detail?id=1&can=1#c2
我试着用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个警告,我没有testing它是否仍然有效
闭包编译器消除了你实际上没有使用的任何代码。 典型的网页将只使用一小部分jQuery函数,所以最大的好处将来自编译你的代码和完整版本的jQuery。
随着ADVANCED_OPTIMIZATIONSclosures:
- 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%)
随着ADVANCED_OPTIMIZATIONS开启:它无法修改。 随着ADVANCED_OPTIMIZATIONS打开,我可以find导出的所有东西…它仍然不能正常工作,代码已经高达53466字节(和18785 gzipped,这是比没有ADVANCED_OPTIMIZATIONS压缩闭合代码多)所以这看起来不像是一个胜利的主张。
从jQuery 1.4开始,Google的Closure Compiler被用作jQuery版本的默认缩小技术。 但是,jQuery只使用SIMPLE_OPTIMIZATIONS设置。 jQuery团队没有计划支持ADVANCED_OPTIMIZATIONS 。
出于好奇,我把最新的Prototype和jQuery库的SlickSpeedtesting放在一起,用YUI和Closure缩小。 你可以在这里运行testing 。
正如其他人所指出的那样,使用ADVANCED_OPT编译不起作用,但如果有人想完成这项工作,我很乐意将结果添加到SlickSpeedtesting中。
不closures只是最小化和重命名瓦尔斯? jQuery已经有一个.min版本。 再次closures,可能是最小的帮助和潜在的危险。
编辑:我刚刚做到了。
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
我使用了Closure(使用ADVANCED_OPTIMIZATIONS)来压缩我托pipe的单页网站的JavaScript代码,并且在YUI Compressor上看到了显着的大小节省。 所以我开始考虑收缩该网站的jQuery,因为它当然不使用entier jQuery库。
每当我通过编译器运行jQuery时,我都会收到警告,主要是指出部分未使用的代码。 即使如此,编译的代码也不起作用。 我看到的主要问题是编译器不能正确导出。 我能够通过将自己的代码附加到窗口对象来轻松地从我自己的代码中导出函数,但是我还没有用jQuery来做到这一点。
好消息是John Resig已经在尝试Closure。 我怀疑我们会在不久的将来看到两个兼容的新版本。
我试着用在线编译器 ,它运行良好。
jQuery与高级模式下的Closure Compiler不兼容。 我同意将它兼容是一件非常好的事情,因为它的方法链接语法非常容易为原型虚拟化提高执行速度。
事实上,在stream行的JavaScript库(Closure Library除外)中,只有Dojo Toolkit兼容Closure Advanced模式。