我正在开发一个GWT项目,我们使用FlexTable来显示一些数据。我知道我们应该使用CellTable,因为它具有更好的性能,但是FlexTable更容易进行样式设计(样式特定单元格),并且使得更新特定单元格更加容易。
为了接收表格更新,我们使用WebSockets。我们现在面临的问题是,当每秒钟有超过100个更新通过WebSockets传递时,CPU负载很高。每个WebSocket连接的消息包含表格中多个单元格的更新。因此,在实践中,应该呈现超过100次每秒的更新到FlexTable中。我的3GHz i5处理器和4GB RAM内存的CPU负载约为50%。如果我禁用实际数据的呈现(注释掉setText()方法调用),那么CPU负载将下降至5-10%。因此,我知道DOM更新是瓶颈,而不是代码的其他部分。
是否最好:
为了接收表格更新,我们使用WebSockets。我们现在面临的问题是,当每秒钟有超过100个更新通过WebSockets传递时,CPU负载很高。每个WebSocket连接的消息包含表格中多个单元格的更新。因此,在实践中,应该呈现超过100次每秒的更新到FlexTable中。我的3GHz i5处理器和4GB RAM内存的CPU负载约为50%。如果我禁用实际数据的呈现(注释掉setText()方法调用),那么CPU负载将下降至5-10%。因此,我知道DOM更新是瓶颈,而不是代码的其他部分。
是否最好:
- 使用Grid代替
- 切换到CellTable(但如何进行单个单元格更新)?
- 使用JS / JSNI处理DOM,而不是FlexTable setText()
有更好的实现表格和提高性能的方法吗?
我尝试在谷歌上搜索是否有人遇到过FlexTable类似的问题,但只发现普遍意见认为它很慢,没有具体的解释。我们的应用程序原型完全使用JavaScript完成,每秒相同的100次更新时,CPU负载约为15%
更新
放弃我们用来指示单元格值变化的css淡入效果可以将CPU负载降低约10%。因此,DOM不是唯一的问题。
CellTable
。 - Riley Lark