2011-10-08 57 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