Joh*_*ith 10 jquery minify google-closure-compiler
是否可以使用闭包编译器删除jQuery的未使用部分?
我有一个只使用jQuery的网络(json)函数的脚本,我想要一个删除其他所有东西的缩小脚本.
我试过调用它:
java -jar compiler.jar --compilation_level=ADVANCED_OPTIMIZATIONS --js=jquery-latest.js --js=my_script.js --js_output_file=out.js
Run Code Online (Sandbox Code Playgroud)
但我最终得到的文件不小于常规的缩小jQuery源代码.
编辑:我应该提一下背后的原因.此脚本将包含在第三方网站中,它需要更高版本的jQuery(1.5或1.6).我认为最简单的处理方法是将最新版本捆绑在脚本中(仅适用于我的脚本,而不是触及window.jQuery),删除未使用的部分以减小大小.这样,如果他们已经有了旧版本的jQuery,它就不会干涉.
在jQuery中删除"未使用"的方法是不可能的,因为你可以用疯狂的方式调用方法,如:
<input id="test" value="hello!"/>
alert($('#test')[prompt('Method?')]()); // input "val" in the prompt box
Run Code Online (Sandbox Code Playgroud)
闭包编译器不可能知道将使用哪些方法.
小提琴: http ://jsfiddle.net/garreh/xDDXt/
正如一些旁注:
<script>标记放在页面底部,以实现更好的下载并行化.http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5/首先,对于死代码删除,您需要高级模式.我看到你已经在使用它.
其次,必须编写代码以符合使用高级模式的严格限制.我想你已经完成了并彻底检查了你的代码 - 否则编译后的代码将无效.
然后你需要引用jQuery"externs"文件 - 你可以从Closure Compiler的网站上获得它.如果没有这个externs文件,Closure将重命名jQuery中不应该的属性和函数.
最后,jQuery不是用Closure Compiler的高级模式编写的.有许多地方它创造了"别名",无法优化.即使在代码库中的任何位置都有一个别名,整个jQuery对象也会被拉进来.
简答:如果没有大量的工作就不可能使用Closure Compiler的高级模式和jQuery来删除死代码.
Off-Topic:Dojo Toolkit是迄今为止唯一可以在高级模式下与Closure Compiler一起使用的流行JavaScript库(Closure Library除外).所有Closure Compiler的高级功能(例如死代码删除,方法虚拟化,名称空间展平等)都受支持.
查看此链接以获取TODO文档:http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user = t
| 归档时间: |
|
| 查看次数: |
4787 次 |
| 最近记录: |