GWT 将大量数据从服务器发送到客户端的最佳实践
Posted
技术标签:
【中文标题】GWT 将大量数据从服务器发送到客户端的最佳实践【英文标题】:GWT Best practice to send huge amount of data from server to client 【发布时间】:2011-08-09 11:36:21 【问题描述】:在 GWT 中从服务器向客户端发送大量数据的最佳实践是什么?
现在我们在 GWT 2.3.0 中面临性能问题。
我们的服务器端正在向客户端发送巨大的 xml(大小以 MB/GB 为单位),我们的客户端解析该 xml 并使用解析的数据,形成 bean 列表以在 Celltable 网格中填充数据。
我们正在 CellTable 网格中填充 1k + / 10k+ 条记录。
在处理如此庞大的数据时,是否有任何有效的方法/最佳实践? 如果我们在服务器端解析数据并在服务器端形成bean,这样好吗?或任何替代方式..
在此问题上的任何帮助或指导将不胜感激。
【问题讨论】:
数据的压缩程度如何?如果延迟在网络中,也许压缩 - 发送 - 解压缩可能会更快。 【参考方案1】:基本上,您只请求与用户当前查看的数据一样多(并且多一点)的数据,而不是整个数据集。
更多详情请参阅Adding Paging Controls。
【讨论】:
【参考方案2】:为您的案例处理大数据时的两种做法:
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 提到的关于添加分页控件的链接)
【讨论】:
【参考方案3】:与其他答案一样,仅返回用户可以有效使用的数据,并在用户请求时懒惰地获取其他数据(或Predictive Fetch)。
请参阅此处的 AsyncDataProvider 部分: http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellWidgets.html#data-provider
【讨论】:
【参考方案4】:使用分页。 GWT 单元小部件支持开箱即用的分页。因此,实现服务器端分页,以便每次单击“下一步”时都会进行服务器调用。这样,客户端一次只能处理 10 或 20 条记录。
使用 Javascript Overlay 类型作为显示 bean。要填充这些 bean,请使用 JSON 作为传输模型而不是 XML。如果您使用 XML(即异步调用),则 GWT 在后端执行一些 JAXB 编组/解组逻辑。如果您使用 JSON,则可以避免大部分情况。
【讨论】:
以上是关于GWT 将大量数据从服务器发送到客户端的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
如何将 URL 参数从 GWT 客户端发送到服务器端进行验证