GWT如何为每个浏览器提供正确的Javascript代码,例如执行i18n和浏览器兼容性

How does GWT provide the correct Javascript code to every browser e.g. to carry out i18n and browser compatibility?

本文关键字:浏览器 Javascript 代码 执行 兼容性 i18n GWT      更新时间:2023-09-26

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

从维基上阅读以下内容: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 还是 Opera?它是否解析请求的用户代理标头?(我会对此表示怀疑,因为它不是那么可靠)它是否使用一种Javascript"引导"客户端代码,该代码在运行时快速确定用户的浏览器,然后向服务器发出异步请求,以使用该语言环境为浏览器下载适当的优化,特定于语言的Javascript代码?

魔法到底是怎么发生的?

感谢您的关注!

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

事实正是如此。有一个非常小的引导 javascript 文件(yourmodulename.nocache.js),您可以从 html 页面加载(使用普通的 <script> 标记)。该脚本使用 navigator.userAgent 确定浏览器类型,并从那里动态加载"浏览器依赖"部分(应该缓存,因为它可能很大)。

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