我的应用框架是围绕折叠主干模型构建的,通过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));
很好的问题,我工作的同样的事情 –