Dojo dgrid + WebSocket通知导致应用程序无响应

时间:2017-01-06 19:44:17

标签: javascript dojo dgrid dstore

在我的应用程序中,我使用OnDemandGrid(由Request + Trackable dstore支持)向用户显示我的数据。

服务器通过websocket向客户端发送通知,以向网格添加新条目。要将新条目添加到网格中,商店会发出“添加”条目。事件,类似下面的代码:

function _emitAddEvent(store, entity) {
    store.emit('add', {
        target: entity,
        id: entity.id
    });
}

直到这里,一切都很好。应用程序从服务器接收要添加到网格的新条目,并添加它(不刷新网格)。问题是如果服务器在很短的时间间隔内发送了太多通知。商店将所有事件发送到dgrid,但网格花了一些时间来呈现所有行。由于要添加的条目太多,应用程序无响应。如果服务器停止向客户端发送数据,则在一段时间后,应用程序将恢复并正确呈现所有行。现在是第二个(但是次要的)问题。

第二个问题是,在网格渲染所有新行之后,它不会破坏太远的行。我设置了farOffRemoval属性,但它似乎只处理滚动发生并向服务器请求新数据的情况。我想知道是否存在一种不依赖滚动的解决方法来销毁距离网格上用户当前位置太远的节点。

1 个答案:

答案 0 :(得分:0)

好吧,我已经设法为第一个问题编写了一个变通方法。由于应用程序变得没有响应,因为客户端在很短的时间内收到了很多通知,我选择在队列中添加事件并以最大每秒一次的方式发出它们。 dojo/throttle和setInterval就足够了。

第二个问题,与farOffRemoval属性相关,我无法解决。经过一些测试后,我注意到浏览器可以拥有大量的DOM节点而不会失去显着的性能(当然,这取决于用户机器),所以我只是保持网格不变。