我有一个巨大的GWT应用程序,在编译之后,它会生成一个文件 XXX.chace.html 。此文件非常大 - 大约3 MB - 并且它要求用户花费30秒来加载网页。除了使用代码拆分之外,还有减少此文件的目的吗?我尝试在GZip中使用compress命令,但显然存在一个错误,即大于1.5 MB的文件不会被压缩。
以前有人遇到过这个问题吗?你怎么能解决它?
答案 0 :(得分:4)
使用code splitting可以帮助您整理代码。
不幸的是,您需要查看您的应用是如何设置才能充分利用它的,但如果您的应用程序非常庞大,您肯定会从中受益。
答案 1 :(得分:3)
如果您不想使用代码拆分,您的另一个选择是减小代码的大小。以下是一些指示。
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做什么。
答案 2 :(得分:3)
确保gwt只是编译它需要的代码。使用接口/抽象类型可以增加您的大小。
例如,如果您在RPC调用中返回Map,那么gwt将需要包含它可用的Map的所有子类型。返回像HashMap这样的具体类将停止此操作。这是因为gwt代码被编译成Javascript,因此它编译了它认为可能需要的所有代码。
答案 3 :(得分:3)
使用compile report找出导致大代码大小的确切原因。然后尝试消除最大的类或字符串。
答案 4 :(得分:0)
这可能是来自其他方向的方法,但Google App Engine提供PageSpeed optimization service,您可以使用它来加快用户加载应用所需的时间。
它不是免费的,除了常规GAE带宽成本之外,每GB带宽传输0.39美元,但you could opt out parts of your app未在服务下进行优化。