簡體   English   中英

Dojo dgrid + WebSocket通知導致應用程序無響應

[英]Dojo dgrid + WebSocket notifications causing application to become unresponsive

在我的應用程序中,我使用一個由Request + Trackable dstore支持的OnDemandGrid向用戶顯示我的數據。

服務器通過websocket向客戶端發送通知,以將新條目添加到網格中。 要將新條目添加到網格,商店將發出“添加”事件,類似於以下代碼:

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

到這里為止,一切都很好。 應用程序從服務器接收要添加到網格的新條目,然后將其添加(不刷新網格)。 問題是,如果服務器在一個很小的時間間隔內發送了太多的通知,則該問題將被發送。 存儲將所有事件發送到dgrid,但是網格花了一些時間來呈現所有行。 因為要添加的條目太多,所以應用程序無響應。 如果服務器停止向客戶端發送數據,則一段時間后,應用程序將恢復並正確呈現所有行。 現在是第二個(但次要的)問題。

第二個問題是,在網格渲染了所有新行之后,它不會破壞太遠的行。 我已經設置了farOffRemoval屬性,但它似乎僅能處理發生滾動和向服務器請求新數據的情況。 我想知道是否存在一種不依賴滾動的解決方法,以銷毀與網格上用戶當前位置相距太遠的節點。

好吧,我已經設法為第一個問題編寫了解決方法。 由於應用程序由於在短時間內客戶端收到大量通知而變得無響應,因此我選擇將事件添加到隊列中,並以每秒最大的速度發出事件。 dojo/throttle以及setInterval就足夠了。

第二個問題,與farOffRemoval屬性有關,我無法解決。 經過一些測試,我注意到瀏覽器可以有很多DOM節點而不會損失很多性能(當然,這取決於用戶計算機),因此我只是保持了網格不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM