【问题标题】:Why does GWT compilation require user-agent specification?为什么 GWT 编译需要用户代理规范?
【发布时间】:2016-10-20 07:29:11
【问题描述】:

我已经使用 GWT 有一段时间了。我现在想知道为编译过程指定用户代理的目的是什么。我试图获取有关此的一些信息,但到目前为止,我能得到的唯一解释是它是创建适合浏览器的最终 JS。我的问题是,浏览器之间有什么不同,它需要明确提及我们计划在哪个浏览器上使用它?因为最终结果是 Javascript。难道 JS 不应该在所有浏览器上都以类似的方式工作,因为它们都将实现 JS 吗?我能想到的唯一区别是 CSS 的区别,在需要的地方有浏览器特定的 CSS 属性名称。在什么情况下,GWT编译的输出能不产生一个单一的JS吗?我错过了什么?如果 JS 有一些差异,那么那些从事 JS 或 jQuery 或 Angular 等工作的人应该考虑什么?

我已经阅读了 gwt 文档的这一部分,http://www.gwtproject.org/doc/latest/FAQ_DebuggingAndCompiling.html -> .cache.html 文件。但我不明白这到底是什么意思。他们指的是什么问题?

【问题讨论】:

  • “为编译过程指定用户代理”和“明确提及我们计划在哪个浏览器上使用它”是什么意思?
  • @ThomasBroyer,我指的是 .gwt.xml 属性<set-property name="user.agent" value="gecko1_8"/>
  • 是什么让您认为它是必需的?您对默认值有任何疑问吗?
  • @ThomasBroyer,很抱歉没有把它放在问题中。我的目的不是了解是否指定 user.agent 属性,而是了解不同浏览器特定 JS/缓存文件生成的原因。我提到了该属性,因为它们是相连的。
  • 别担心,我试图澄清这个问题;可能会揭穿你身边的误解和误解(显然不是,这很好)。

标签: javascript gwt user-agent


【解决方案1】:

GWT 应用特定于浏览器的优化。即使浏览器之间的 javascript 应该是相同的,尤其是旧版浏览器也存在差异,这些差异由 GWT 处理(参见 https://stackoverflow.com/a/14466646/3906760 关于臭名昭著的 XMLHTTPRequest 与 IE 中的 ActiveX 以及 Canvas 与 VML)。

缓存文件(称为排列)特定于语言和浏览器,因此客户端只需下载所需的代码,而不是一个非常大的文件(使用 GWT 延迟加载)。

为不同浏览器替换实现的示例,请参阅http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html(延迟绑定示例)。

【讨论】:

  • 谢谢@MrTux。通过“优化”,我想您也包括“调整”。据我所知,浏览器之间存在很大差异。如果对任何人有帮助,请在此处分享更多内容(尽管很旧)以供参考。 [链接]impressivewebs.com/7-javascript-differences-between-firefox-ie,[链接]dzone.com/articles/why-your-javascript-developed。我想浏览器采用这种方式有利有弊。无论如何,像 jQuery/Angular JS 这样的库也有这个问题吗?以及如何解决?有什么想法吗?
  • AngularJS 和 Polymer(我猜也是 JQuery)对旧版浏览器使用 polyfill(shim)。它在javascript中实现功能,浏览器本身不支持它,主要是旧浏览器...en.wikipedia.org/wiki/Polyfill
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 2013-05-07
  • 2014-07-28
  • 2017-10-07
  • 2019-12-31
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多