Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT优化嵌入式javascript吗?_Javascript_Gwt_Gwt Compiler - Fatal编程技术网

GWT优化嵌入式javascript吗?

GWT优化嵌入式javascript吗?,javascript,gwt,gwt-compiler,Javascript,Gwt,Gwt Compiler,众所周知,GWT将Java源代码编译为优化的Javascript。例如,它将消除所有未使用的函数。如果您使用第三方库,如gwtQuery,这将非常有用 我想知道是否有一种方法可以让GWT同时优化Javascript嵌入到带有标记的HTML页面中。例如,与其让用户下载完整的JQueryJavascript库,不如只下载所使用的少数函数。如果您谈论添加到页面的额外标记,答案是否定的-怎么可能?您正在将这些标记添加到html页面,GWT无法知道它们将是什么,也无法更改它们的来源,至少在不重写html文

众所周知,
GWT
Java
源代码编译为优化的
Javascript
。例如,它将消除所有未使用的函数。如果您使用第三方库,如
gwtQuery
,这将非常有用


我想知道是否有一种方法可以让
GWT
同时优化
Javascript
嵌入到带有
标记的HTML页面中。例如,与其让用户下载完整的
JQuery
Javascript
库,不如只下载所使用的少数函数。

如果您谈论添加到页面的额外
标记,答案是否定的-怎么可能?您正在将这些标记添加到html页面,GWT无法知道它们将是什么,也无法更改它们的来源,至少在不重写html文件本身的情况下是这样(GWT不是这样工作的)


如果您正在谈论将JS放入应用程序中的JSNI方法,那么答案是“某种程度上”或“视情况而定”。如果使用GWT2.4或更早版本,那么只会执行非常有限的优化,例如插入字符串和内联非常简单的方法。如果您使用的是GWT2.5或更高版本,并且启用了闭包编译器选项,那么闭包将修改编译输出中的所有源代码,包括JSNI方法。请注意,如果设计时没有考虑闭包,此优化可能会破坏一些JS源代码。

我不确定,但从我对GWT的了解来看,我会说不,这是不可能的。但您可以在加载jQuery(或您拥有的任何其他函数)之前测试它是否需要,如下所述:gwtquery不是一个3party javascript库,它是一个完整的GWT库(实际上是用java重写jQuery api)所以它确实需要任何类型的优化,因为gwt编译器将摆脱未使用的方法,并将优化所有代码。也许你的意思是jquery(你可以编辑你的问题)。如果导入gwtquery,则不需要jquery来使用api。显然,如果您使用jquery插件,您需要jquery,因为它们是用js编写的,因为gwtquery插件是用java编写的。无论如何,优化BITjQuery的唯一方法是将代码复制到jsni块中,但它不起作用。我似乎不太奇怪,不想在某个地方添加js文件,以便GWT将其添加到编译步骤中。您可以将所有外部js文件添加到已编译的javascript代码中(来自java源文件),然后让闭包完成这项工作。所以在我看来这是可能的。这只是如何添加js的问题。也许有一种方法可以通过JSNI添加外部JS代码。但是你是对的,让GWT重写HTML页面是没有意义的。您是否同意这是可能的,但尚未实施?您可以使用JSNI添加一个完整的外部JS文件,并期望GWT删除未使用的方法吗?如果您记得GWT是一个Java到JavaScript的编译器,这似乎并不奇怪。GWT永远不应该重写HTML页面,而且GWT几乎肯定永远不应该重写模块文件中的JS(如果我从另一台服务器加载,并期望它发生变化怎么办?如果我想使用不支持GWT的JS,如
with
语句怎么办?如果我的代码使用
eval
执行反射以访问其他无法访问的代码怎么办?)。最后,正如我的回答所说,JSNI可以包含JS,但它只会被优化(删除额外的方法)如果启用闭包。