【问题标题】:Advanced Google Closure Compiler Optimisation with jQuery使用 jQuery 进行高级 Google Closure 编译器优化
【发布时间】:2018-02-14 10:21:34
【问题描述】:

我尝试使用 Google Closure Compiler 编译我的 JS+jQuery 脚本。它适用于简单的优化选项。但是,当我切换到高级优化时,会出现一些错误。

例如,它将 jQuery $.ajax() 方法更改为 $.i()。这只会让浏览器发疯。

关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • “让浏览器发疯”是什么意思?你观察到什么?
  • 为什么在关于闭包编译器的时候用uglifyjs标记?

标签: javascript jquery minify


【解决方案1】:

高级优化会破坏名称,包括属性访问。为了使用高级优化,您必须专门为该目的编写代码。在为闭包编译器编写的大量library code 结尾处,您会看到如下内容:

window['MarkerClusterer'] = MarkerClusterer;
MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker;
MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers;
MarkerClusterer.prototype['clearMarkers'] = MarkerClusterer.prototype.clearMarkers;

或者一个简化的例子

window['myLibraryName'] = myLibrary;
myLibrary['someMethod'] = myLibrary.someMethod;

原因是编译器显然不会破坏字符串文字,现在这些名称可以通过 myLibrary 对象正确导出。

因此,除非 jQuery(或任何其他库)是专门为使用该功能而编写的,否则您不能使用高级优化。这是一个经常针对闭包编译器的批评。 OTOH,这是谷歌为他们自己、为他们自己的代码库编写的东西,并且很高兴免费提供给我们,所以......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2010-12-14
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多