2

我有一个巨大的 GWT 应用程序,在我编译它之后,它会生成一个文件XXX.chace.html。这个文件非常大——大约 3 MB——它需要用户花费 30 秒来加载网页。除了使用代码拆分之外,还有什么方法可以减少这个文件?我尝试在 GZip 中使用 compress 命令,但显然存在一个错误,即大于 1.5 MB 的文件不会被压缩。

有没有人遇到过这个问题?你是怎么解决的?

4

5 回答 5

4

使用代码拆分将帮助您将代码分块。

不幸的是,您需要查看您的应用程序是如何设置的以利用它,但如果您的应用程序如此庞大,您肯定会从中受益。

于 2012-10-01T23:01:40.090 回答
3

确保 gwt 只是在编译它需要的代码。使用接口/抽象类型可以增加你的大小。

例如,如果您在 RPC 调用中返回 Map,则 gwt 将需要包含它可用的所有 Map 子类型。返回像 HashMap 这样的具体类将停止此操作。这是因为 gwt 代码被编译成 Javascript,所以它编译它认为可能需要的所有代码。

于 2012-10-02T04:31:51.867 回答
3

如果您不想使用代码拆分,您的另一个选择是减少代码的大小。这里有一些建议。

1) 你是否在你的应用中使用了大量的文本,比如每页上的几个段落?您可以考虑使用 ExternalTextResource 而不是在 JavaScript 中内联文本。

2) 列出您在应用程序中使用的所有小部件。看看你是否真的需要所有这些。例如,如果您使用多种类型的 LayoutPanel,您可能会决定仅使用 LayoutPanel。如果您使用 VerticalPanel 和/或 Horizo​​ntalPanel,您可以完全摆脱它们并改用 CSS。我从许多 GWT 帖子中注意到,人们喜欢使用很多小部件(面板内面板内面板等),而简单的 CSS 就可以了。

请注意,当您完全摆脱一个小部件时(更好的是整个小部件类),而不是减少一个视图中的小部件数量,您将获得大部分好处。

3) 尽可能使用 Ui:Binder。请注意,您可以在 Ui:Binder 中设置许多属性:类名、大小、文本小部件的文本、工具提示。我相信在代码中执行它更有效(我没有验证它,但无论如何它是一个好习惯。)

4)检查您是否有效地使用事件处理程序。如果您连续有 10 个按钮/标签,您可能不必为每个按钮/标签附加一个事件处理程序,而是将一个处理程序附加到它们的容器。如果单击一行中的每个单元格执行相同的操作(例如打开一个对话框),则不必在每个单元格中包含此代码 - 您可以单击一行。等等。

这是一个数据点:我有一个应用程序,其中包含 50 多个复杂的“页面”(不同的位置/视图)、30 多个数据实体、60 多个自定义小部件和 1,000 多个文本常量。它编译为 1.2MB。(我使用 GWT RPC)。我只能想象你可以用 3MB 做什么。

于 2012-10-02T01:28:58.473 回答
3

使用编译报告找出导致大代码大小的确切原因。然后尝试消除最大的类或字符串。

于 2012-10-02T08:30:08.820 回答
0

这可能是另一个方向的方法,但 Google App Engine 提供了PageSpeed 优化服务,您可以使用它来加快用户加载应用程序所需的时间。

虽然它不是免费的,除了常规的 GAE 带宽成本外,每 GB 带宽传输 0.39 美元,但您可以选择退出应用程序的某些部分,以便在该服务下不进行优化。

于 2012-10-02T13:32:03.423 回答