我有一个巨大的 GWT 应用程序,在我编译它之后,它会生成一个文件XXX.chace.html。这个文件非常大——大约 3 MB——它需要用户花费 30 秒来加载网页。除了使用代码拆分之外,还有什么方法可以减少这个文件?我尝试在 GZip 中使用 compress 命令,但显然存在一个错误,即大于 1.5 MB 的文件不会被压缩。
有没有人遇到过这个问题?你是怎么解决的?
我有一个巨大的 GWT 应用程序,在我编译它之后,它会生成一个文件XXX.chace.html。这个文件非常大——大约 3 MB——它需要用户花费 30 秒来加载网页。除了使用代码拆分之外,还有什么方法可以减少这个文件?我尝试在 GZip 中使用 compress 命令,但显然存在一个错误,即大于 1.5 MB 的文件不会被压缩。
有没有人遇到过这个问题?你是怎么解决的?
使用代码拆分将帮助您将代码分块。
不幸的是,您需要查看您的应用程序是如何设置的以利用它,但如果您的应用程序如此庞大,您肯定会从中受益。
确保 gwt 只是在编译它需要的代码。使用接口/抽象类型可以增加你的大小。
例如,如果您在 RPC 调用中返回 Map,则 gwt 将需要包含它可用的所有 Map 子类型。返回像 HashMap 这样的具体类将停止此操作。这是因为 gwt 代码被编译成 Javascript,所以它编译它认为可能需要的所有代码。
如果您不想使用代码拆分,您的另一个选择是减少代码的大小。这里有一些建议。
1) 你是否在你的应用中使用了大量的文本,比如每页上的几个段落?您可以考虑使用 ExternalTextResource 而不是在 JavaScript 中内联文本。
2) 列出您在应用程序中使用的所有小部件。看看你是否真的需要所有这些。例如,如果您使用多种类型的 LayoutPanel,您可能会决定仅使用 LayoutPanel。如果您使用 VerticalPanel 和/或 HorizontalPanel,您可以完全摆脱它们并改用 CSS。我从许多 GWT 帖子中注意到,人们喜欢使用很多小部件(面板内面板内面板等),而简单的 CSS 就可以了。
请注意,当您完全摆脱一个小部件时(更好的是整个小部件类),而不是减少一个视图中的小部件数量,您将获得大部分好处。
3) 尽可能使用 Ui:Binder。请注意,您可以在 Ui:Binder 中设置许多属性:类名、大小、文本小部件的文本、工具提示。我相信在代码中执行它更有效(我没有验证它,但无论如何它是一个好习惯。)
4)检查您是否有效地使用事件处理程序。如果您连续有 10 个按钮/标签,您可能不必为每个按钮/标签附加一个事件处理程序,而是将一个处理程序附加到它们的容器。如果单击一行中的每个单元格执行相同的操作(例如打开一个对话框),则不必在每个单元格中包含此代码 - 您可以单击一行。等等。
这是一个数据点:我有一个应用程序,其中包含 50 多个复杂的“页面”(不同的位置/视图)、30 多个数据实体、60 多个自定义小部件和 1,000 多个文本常量。它编译为 1.2MB。(我使用 GWT RPC)。我只能想象你可以用 3MB 做什么。
使用编译报告找出导致大代码大小的确切原因。然后尝试消除最大的类或字符串。
这可能是另一个方向的方法,但 Google App Engine 提供了PageSpeed 优化服务,您可以使用它来加快用户加载应用程序所需的时间。
虽然它不是免费的,除了常规的 GAE 带宽成本外,每 GB 带宽传输 0.39 美元,但您可以选择退出应用程序的某些部分,以便在该服务下不进行优化。