1

我对 RequestFactory 和 GWT 的性能有疑问。我有一个包含 8 个字段的域实体,它返回大约 1000 个 EntityProxies。请求触发和响应之间的时间约为 20 秒。我也这样做,但返回 10 个 EntityProxies,时间是 17 秒,几乎相同。

这是因为我在开发模式下工作,还是当我将代码发布到网络时,时间会一样?

有什么方法可以提高性能吗?,我只是在读取数据,所以也许只读取而不写入的东西可能是解决方案?

我读了这篇文章,内容与我的问题类似:

GWT Requestfactory 性能建议

非常感谢。

PD:我在某处读到,一种解决方案可能是在服务器中创建一个 xml,将其发送到客户端并在那里重新创建对象,我不想这样做,因为它真的会改变我的应用程序的设计。

4

3 回答 3

1

谢谢大家的帮助,我现在意识到使用请求工厂检索数千条记录可能是一个错误。

根据这篇文章,我最初使用 Locator 覆盖 isLive() 和 Find() 方法: gwt-requestfactory-performance-suggestions

响应时间减少到大约 13 秒,但仍然太高。

但我很容易解决了。我没有返回 1000+ Entities ,而是创建了一个新的数据库表,其中每个字段都有所有相同的字段记录(1000+)并由分隔符连接(每个 db 字段的长度约为 10000 )并且我只有一个记录在表中大约有 8 个字段。

像这样的东西:

 Field1           |           Field2          |           Field3         

Field1val;Field1val;Field1val;....... | Field2val;Field2val;Field2val;...... | 字段 3 值;字段 3 值;字段 3 值;......

我通过 RequestFactory 将那条记录返回给我的客户,它大大降低了速度!,大约 1 秒。我在客户端解析这个大字符串,持续时间约为 500 毫秒。因此,现在不需要浪费大约 20 秒,而是需要大约 1-2 秒来完成相同的操作。

顺便说一下,我只显示信息,不需要插入、删除或更新记录,所以这个解决方案对我有用。

以为我可以分享这个解决方案。

于 2013-01-17T18:01:24.483 回答
0

GWT 中的性能分析和修复问题很棘手。避免在 GWT 托管模式下进行所有分析。它们并不意味着任何有用的东西。

您应该只在 WEB 模式下配置文件。

GWT RequestFactory 在设计上比 GWT RPC 和 GWT JSON 等要慢。这是在 GWT RF 计算增量并在保存时仅向服务器发送少量信息的能力的权衡。

您应该重新检查您的应用程序设计以避免加载 1000 个代理。RF 是指类似“表单”的应用程序。您可能需要 1000 个代理的唯一原因是用于网格显示。在这种情况下,您可能可以使用分页异步网格。

于 2013-01-16T18:08:33.957 回答
0

您应该分析您的应用程序,以了解在以下步骤上花费了多少时间:

  1. 从数据库(服务器)检索的实体:这可以使用二级缓存和优化查询来改进
  2. 实体序列化为 JSON(服务器):这里有开销,因为RequestFactory分别AutoBean依赖于反射。您可以尝试仅传输您也将在客户端上显示的实体。另一个大大减少延迟的优化是覆盖isLive你的方法EntitiyLocator并返回true
  3. 从服务器到客户端的 HTTP 请求以传输数据(线路):您可以考虑使用 gzip 压缩来减少必须传输的数据量(如果您通过线路发送大量对象,这一点很重要)。
  4. 客户端(客户端)上的反序列化:这应该是相当快的。有一个基准表明AutoBean序列化是序列化 JSON 的最快方法之一。同样,这将受益于不通过网络发送整个对象图。

提高性能的一种方法是使用缓存。您可以使用 HTML5localstorage在客户端缓存数据。这特别适用于不经常更改的数据。

于 2013-01-17T10:48:49.080 回答