我正在研究 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 有类似的问题,我曾尝试用谷歌搜索,但发现只是普遍认为它很慢,没有什么特别的。我们有纯粹用 JavaScript 完成的应用程序原型,同样每秒 100 次更新,CPU 负载约为 15%
更新
Dropping css 淡入淡出效果,我们用来指示单元格值的变化将 CPU 负载降低了约 10%。所以看来 DOM 并不是唯一的问题。