哪些是在GWT中从服务器向客户端发送大量数据的最佳做法?
目前我们正面临GWT 2.3.0中的性能问题。
我们的服务器端向客户端发送巨大的xml(大小以MB / GB为单位),我们的客户端解析xml并使用解析的数据,形成bean列表以在Celltable网格中填充数据。
我们在CellTable网格中填写1k + / 10k +记录。
在处理如此庞大的数据时,是否有任何有效的方法/最佳实践? 如果我们在服务器端解析数据并在服务器端形成bean,这是好的吗?或任何其他方式..
对此事项的任何帮助或指导将不胜感激。
答案 0 :(得分:6)
基本上,您只需要与用户当前查看的数据(以及更多)一样多的数据,而不是整个数据集。
有关详细信息,请参阅Adding Paging Controls。
答案 1 :(得分:3)
处理案件的大数据时的两种做法:
1)使用JSON而不是xml,这样客户端不需要解析数据,但可以直接使用数据。在GWT中,您可以通过GWT-JSNI接口编写访问这些JavaScript对象的数据对象,请参阅:http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html。使用JSON REST库,您可以在服务器上生成JSON,而不是将xml发送到客户端。但是你也可以在客户端/服务器上使用GWT-RPC,这使得编程更容易,因为进出JSON的整个数据转换由GWT处理,但是向对象发送添加了一些类型信息。
2)使用分页:只获取用户可见的数据并将其缓存在客户端中。如果您有表格演示文稿,则用户不一定需要所有数据。 GWT单元面板支持开箱即用(请参阅Oliver提到的关于添加分页控件的链接)
答案 2 :(得分:3)
与其他答案一样,只返回用户可以有用的数据,并在用户请求时(或Predictive Fetch)懒惰地获取其他数据。
请参阅此处的AsyncDataProvider部分: http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellWidgets.html#data-provider
答案 3 :(得分:2)
使用分页。 GWT单元小部件支持开箱即用的分页。因此,实现服务器端分页,以便每次单击“下一步”进行服务器调用。这样,客户端一次只处理10或20条记录。
使用Javascript Overlay类型作为显示bean。要填充这些bean,请使用JSON作为传输模型而不是XML。如果使用XML(即异步调用),则GWT会在后端执行一些JAXB编组/解组逻辑。如果您使用JSON,则可以避免大部分内容。