2011-10-08 61 views
2

我的應用框架是圍繞摺疊主幹模型構建的,通過websockets發送數據並使用數據更新其他客戶端上的模型。我的問題是,我應該如何在行爲觸發連續5次更改時對這些更新進行批處理。批量Backbone.js事件?

同步方法設置爲更新任何更改,但如果我同時設置5個項目,我不希望它連續激發5次。

我想我可以對任何同步執行setTimeout清除,如果有其他事情嘗試在一秒鐘內同步。這看起來像是最好的路線還是有更好的方法來做到這一點?

謝謝!

+0

很好的問題,我工作的同樣的事情 –

回答

1

我還沒有做過專門的骨幹,但我在過去的其他分佈式(客戶端/服務器)應用程序中完成了這種類型的批量命令。

它的要點是,如果您看到需要,您應該從超時開始並添加批量以進一步優化。

說你有一個批量大小10.當你將9個物品塞入批處理中,然後用戶只是坐在那裏而不做其他事情時會發生什麼?服務器將永遠不會收到用戶想要做的事情的通知。

超時一般很適合小批量使用。但是如果你有一個動作產生大量的相關命令,你可能需要對所有命令進行批處理,並在準備就緒後立即發送它們,而不是等待定時器。時間可能會在創建命令的過程中觸發,並以導致問題的方式分開。

希望有所幫助。

1

Underscore.js,即Backbone.js的使用實用工具庫,具有several functions for throttling callbacks

  • throttle使一個版本,最多執行一次X毫秒的功能。
  • debounce使一個版本,如果X毫秒自上一次它被稱爲
  • after使一個版本,將只執行後,它已被稱爲X次的函數的經過,將只執行一個功能。

所以,如果你知道有將要改變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)); 
+0

什麼約5倍的要求** **或30秒?如何使'後'和'debounce'一起工作? – JobaDiniz

+0

並行使用兩者。 :) – alltom