GWT库与外部JavaScript脚本

4
我为一个Javascript可视化库(dygraphs)编写了一个GWT库。
它是一个简单的包装器,使用JavascriptObjectJSNI来调用dygraphs代码。
到目前为止,我已经在我的GWT模块XML文件中包含了dygraphs.js脚本,并且它工作得很好。
然而,最近我尝试使用SuperDevMode时,不得不切换到xsiframe linker,它不允许脚本标签。
在使用跨站点链接器的情况下,将外部Javascript脚本包含进GWT库的最佳实践是什么?
我能想到的最好的方法是将Javascript文件作为TextResource包含在ClientBundle中,然后使用ScriptInjector来包含它?
这是推荐的方法吗,还是有更好的方法?
我必须确保dygraphs.js在使用我的GWT包装器的应用程序访问它之前完全加载。
1个回答

1
将您的外部JavaScript作为TextResource包含并自行注入,是确保其与应用程序一起加载的非常好的方法。(同时从GWT缓存机制中受益,节省额外的HTTP请求)
如果您正在运行瘦客户端,您可能希望将DOM中的实际注入与解析分开,如果您使用从上到下带有注释的textresource进行注入,然后稍后将其删除,这很容易实现。

更好的方法是将其放入JSNI中,以便编译器对其进行尝试,执行简单的重命名和内联。唯一需要注意的是,如果库使用了 with,那么GWT JSNI不支持 with - Colin Alworth
只有GWT 2.5可以优化生成的JavaScript,低于2.5的版本则不能。 - Daniel Kurka
1
感谢您的反馈。我基本上遵循了以下方法(http://stackoverflow.com/questions/8744663/how-to-insert-twitter-widget-into-a-gwt-view),但与异步请求不同的是,我使用了内联JavaScript脚本。 - Ümit
只有2.5版本能够调用Closure编译器,但是com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.optimizeJs(JJSOptions, JsProgram)在2.4和一些早期版本中尝试对JS AST进行优化。只能进行简单的操作 - 将if语句重写为三元运算符,将字符串内联等,但它仍然可以运行。 - Colin Alworth
1
@DanielKurka请查看https://gist.github.com/3840254,这是一些预闭包优化的快速示例。 - Colin Alworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接