我的應用框架是圍繞摺疊主幹模型構建的,通過websockets發送數據並使用數據更新其他客戶端上的模型。我的問題是,我應該如何在行爲觸發連續5次更改時對這些更新進行批處理。批量Backbone.js事件?
同步方法設置爲更新任何更改,但如果我同時設置5個項目,我不希望它連續激發5次。
我想我可以對任何同步執行setTimeout清除,如果有其他事情嘗試在一秒鐘內同步。這看起來像是最好的路線還是有更好的方法來做到這一點?
謝謝!
我的應用框架是圍繞摺疊主幹模型構建的,通過websockets發送數據並使用數據更新其他客戶端上的模型。我的問題是,我應該如何在行爲觸發連續5次更改時對這些更新進行批處理。批量Backbone.js事件?
同步方法設置爲更新任何更改,但如果我同時設置5個項目,我不希望它連續激發5次。
我想我可以對任何同步執行setTimeout清除,如果有其他事情嘗試在一秒鐘內同步。這看起來像是最好的路線還是有更好的方法來做到這一點?
謝謝!
我還沒有做過專門的骨幹,但我在過去的其他分佈式(客戶端/服務器)應用程序中完成了這種類型的批量命令。
它的要點是,如果您看到需要,您應該從超時開始並添加批量以進一步優化。
說你有一個批量大小10.當你將9個物品塞入批處理中,然後用戶只是坐在那裏而不做其他事情時會發生什麼?服務器將永遠不會收到用戶想要做的事情的通知。
超時一般很適合小批量使用。但是如果你有一個動作產生大量的相關命令,你可能需要對所有命令進行批處理,並在準備就緒後立即發送它們,而不是等待定時器。時間可能會在創建命令的過程中觸發,並以導致問題的方式分開。
希望有所幫助。
Underscore.js,即Backbone.js的使用實用工具庫,具有several functions for throttling callbacks:
所以,如果你知道有將要改變5個項目,你可以這樣註冊的回調:
// only call callback after 5 change events
collection.on("change", _.after(5, callback));
但更可能是你不這樣做,你會想要去與超時方法:
// only call callback 30 milliseconds after the last change event
collection.on("change", _.debounce(30, callback));
很好的問題,我工作的同樣的事情 –