【问题标题】:Deploy GWT Application as Single JavaScript File将 GWT 应用程序部署为单个 JavaScript 文件
【发布时间】:2012-03-13 05:10:24
【问题描述】:

GWT 应用程序的编译后的 JavaScript 输出被分成不同的文件,例如

  • *.cache.html
  • *.gwt.rpc
  • hosted.html
  • *.nocache.js

...

我知道这样做是为了最小化 JavaScript 的大小,而 JavaScript 必须由用户下载。例如,Firefox 用户不必加载专门为 IE6 编译的 JavaScript。

但是,特别是对于小型 GWT 应用程序,下载一个 500kb 的文件通常比先对 5kb *.nocache.js 脚本然后对应用程序的其余部分(缓存. html 文件等)。

这让我想到一个问题:是否有任何框架或程序可以将 GWT 编译器的输出捆绑到单个 JavaScript 文件中

【问题讨论】:

    标签: gwt


    【解决方案1】:

    首先,您可以使用所谓的"soft permutations" 将所有排列合并到一个文件中。

    然后,您可以将 *.nocache.js 内联到 HTML 主机页面(例如,使用 JSP 的 @include 指令)以减少一个额外的请求(您可能需要添加一个 <meta name=gwt:property content='baseUrl=myapp'>,其中 myapp.nocache. 文件所在的子文件夹)。
    AFAIK 这就是 Google 为他们的 GWT 应用所做的。

    或者,如果您可以将选择脚本 (*.nocache.js) 完全替换为服务器端内容协商(基于 User-Agent),则可以在服务器端运行 置换选择和 Accept-Language 请求标头),可以直接为相应的 *.cache.js 文件生成 <script> 标记(前提是您使用 xsiframe 链接器)。

    AFAIK,Google 将所有这些技术用于他们的 GWT 应用程序(例如 Google Groups)。不过,对于一个小型应用程序,我不确定是否值得付出努力……
    此外,当您的 HTML 主机页面已经是动态的并且因此已经不可缓存时,最后两种技术效果最好;否则你主要是在转移问题,而不是解决它。

    我想知道当您将所有属性和软排列折叠成单个硬排列时是否可以使用sso 链接器。

    【讨论】:

    • 谢谢!软排列是我缺少的部分。 GWT 编译器真的非常灵活!
    • sso 链接器现在支持软排列changeset 10938
    【解决方案2】:

    是的,但这可能不是您想要的。请参阅此答案:https://stackoverflow.com/a/4453716/66416 对此 stackoverflow 问题:Merge GWT generated files

    【讨论】:

    • 谢谢!为各个浏览器编译排列,然后手动将它们组合在一起看起来也是一个不错的解决方案!
    【解决方案3】:

    我找到了另一种方法来实现这一点:为 GWT 编写自定义链接器。编译成单个 JavaScript 文件的链接器的两个示例是:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 2011-09-06
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2010-09-24
      相关资源
      最近更新 更多