使用 jQuery 的高级 Google 闭包编译器优化
Advanced Google Closure Compiler Optimisation with jQuery
我尝试使用 Google Closure Compiler 编译我的 JS+jQuery 脚本。它适用于简单的优化选项。但是,当我切换到高级优化时,出现了一些错误。
例如,它将 jQuery $.ajax() 方法更改为 $.i().这只会让浏览器发疯。
关于为什么会发生这种情况的任何想法?
高级优化会破坏名称,包括 属性 访问。为了使用高级优化,您必须专门为 编写代码。在为闭包编译器编写的大量 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,这是 google 为他们自己,为他们自己的代码库编写的东西,并且非常好,可以免费提供给我们,所以...
我尝试使用 Google Closure Compiler 编译我的 JS+jQuery 脚本。它适用于简单的优化选项。但是,当我切换到高级优化时,出现了一些错误。
例如,它将 jQuery $.ajax() 方法更改为 $.i().这只会让浏览器发疯。
关于为什么会发生这种情况的任何想法?
高级优化会破坏名称,包括 属性 访问。为了使用高级优化,您必须专门为 编写代码。在为闭包编译器编写的大量 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,这是 google 为他们自己,为他们自己的代码库编写的东西,并且非常好,可以免费提供给我们,所以...