【发布时间】:2011-11-09 12:52:35
【问题描述】:
我正在处理 GWT 项目,我们使用FlexTable 来显示一些数据。我知道我们可能应该使用CellTable,因为它具有更好的性能,但是 FlexTable 更容易设置样式(设置特定单元格的样式)并且更容易更新特定单元格。
为了接收我们正在使用 WebSockets 的表的更新。我们现在面临的问题是当每秒有超过 100 次更新通过 WebSockets 时,CPU 负载很高。来自 WebSocket 连接的每条消息都包含表中多个单元格的更新。所以在实践中,每秒应该在 FlexTable 中呈现超过 100 次更新。我的 3GHz i5 和 4GB RAM 的 CPU 负载约为 50%。如果我禁用数据的实际呈现(注释掉 setText() 方法调用),那么 CPU 负载会下降到 5-10%。所以我知道 DOM 更新是瓶颈,而不是代码的其他部分。
会不会更好
- 改用网格
- 切换到 CellTable(但是如何进行单个单元格更新)?
- 使用 JS/JSNI 来处理 DOM 而不是 FlexTable setText()
有没有更好的方法来实现表格并提高性能?
如果有人在使用 FlexTable 时遇到类似问题,我曾尝试用 Google 搜索,但发现只是普遍认为它很慢,没有具体内容。我们有纯粹用 JavaScript 完成的应用程序原型,同样每秒 100 次更新,CPU 负载约为 15%
更新
删除我们用来指示单元格值变化的 css 淡入淡出效果将 CPU 负载降低了约 10%。所以看来DOM不是唯一的问题。
【问题讨论】: