批处理Backbone.js事件

Batch Backbone.js events?

本文关键字:事件 js Backbone 批处理      更新时间:2023-09-26

我的应用程序的框架是围绕通过websockets发送数据并使用数据更新其他客户端的骨干模型构建的。我的问题是,当一个动作连续触发5个更改时,我应该如何批量更新这些更新。

同步方法设置为在任何更改时更新,但如果我同时设置5项,我不希望它连续触发5次。

我想我可以在任何同步上做一个setTimeout,如果其他东西试图在一秒钟内同步,它就会被清除。这看起来是最好的路线还是有更好的方法?

谢谢!

我还没有对backbone做过这样的处理,但我过去在其他分布式(客户端/服务器)应用程序中做过这种命令的批处理。

它的要点是,如果您认为需要的话,您应该从超时开始并添加批大小以进一步优化。

假设批量大小为10。当你把9件物品塞进批处理中然后用户只是坐在那里什么都不做时会发生什么?服务器永远不会收到用户想要做的事情的通知。

timeout通常适用于获得小批量。但是,如果您有一个生成大量相关命令的操作,您可能希望批量处理所有命令,并在它们准备好后立即发送它们,而不是等待计时器。时间可能会在创建命令的过程中被触发,并以一种导致问题的方式将事情分开,等等。

Underscore.js是Backbone.js使用的实用程序库,它有几个函数用于限制回调:

  • 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));