【问题标题】:How does GWT provide the correct Javascript code to every browser e.g. to carry out i18n and browser compatibility?GWT 如何为每个浏览器提供正确的 Javascript 代码,例如进行i18n和浏览器兼容?
【发布时间】:2015-01-24 13:27:46
【问题描述】:

我对 GWT 很陌生,进入 Vaadin 世界后我开始研究它。

从 wiki 阅读此内容:https://code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_DeferredBindingDefinition

当 GWT 编译器编译您的 Java 应用程序时,它会确定 它必须支持和产生的所有不同的“特质” 一个单独的、严格精简的应用程序版本 具体配置。例如,它生成不同的版本 Firefox 的应用程序文件比 Opera 的要多。

...

延迟绑定的另一个经典例子是国际化: GWT 编译器使用延迟绑定来生成一个完全 每种语言的单独版本的应用程序。为什么要一个 说英语的人必须下载您的应用程序的法语文本吗?

GWT 使用延迟绑定并将 Java 代码编译为针对目标浏览器优化的不同 Javascript,GWT 还可以为每种语言生成一个 JS 子集以允许 i18n。

现在,关于延迟绑定的解释,这都是在编译时完成的,但实际上在运行时,当服务器有传入请求时,用GWT编写的应用程序如何知道浏览器是Chrome,Firefox还是歌剧?它是否解析请求的 User-Agent 标头? (我会怀疑它,因为它不是那么可靠)它是否使用了一种 Javascript 的“引导”客户端代码,该代码在运行时快速确定用户的浏览器,然后向服务器发出异步请求以下载正确的为具有该语言环境的 that 浏览器优化的、特定于语言的 Javascript 代码?

魔法究竟是如何发生的?

感谢关注!

【问题讨论】:

    标签: java javascript gwt cross-browser


    【解决方案1】:

    它是否使用了一种 Javascript 'bootstrap' 客户端代码 在运行时快速确定用户的浏览器,然后使 对服务器的异步请求以下载适当的优化, 具有该语言环境的浏览器的特定语言 Javascript 代码?

    这正是发生的事情。您可以从 html 页面加载一个非常小的引导 javascript 文件 (yourmodulename.nocache.js)(使用普通的 <script> 标签)。该脚本使用navigator.userAgent 确定浏览器类型,并从那里动态加载“浏览器相关”部分(应该被缓存,因为它可能很大)。

    在编译时,GWT 确定需要多少排列(外部因素的组合,例如浏览器模型、资源语言等)。然后为每个组合生成一个结果 javascript 模块。
    虽然您会部署所有这些文件,但每个客户在访问您的网站时只会下载与其相关的文件。

    【讨论】:

    • 太棒了!谢谢你的解释!
    • 请注意,Google 使用“服务器端选择脚本”,即他们在服务器端选择 *.cache.js(基于 User-Agent 和 Accept-Language 标头)并且根本不使用 *.nocache.js。
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多