如何创建类似于 javascript throttle/debounce 函数的 Rails/Ruby 方法
How to create a Rails/Ruby method similar to javascript throttle/debounce function
在我们的应用程序中,我们公开了一个回调路由供外部服务访问。当我们收到回调时,我们使用 client/browser-side 上的事件源向客户端订阅者发布更新,并在服务器端抽筋。然而,有时我们会收到来自该外部服务的回调请求的轰炸,这导致我们向客户端发布大量更新。在 Rails 端有没有一种方法,类似于 javascript 去抖功能,可以在收到的回调之间等待一段设定的时间来发布消息?
我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具的建议。
有 Sidekiq-debounce gem 可用。
另一种方法(没有这种 gem)是使用 Rails.cache
每 x 次仅触发一次执行
delay = 1.minute
Rails.cache.fetch('unique-identifier-of-the-job', expires_in: delay) do
YourActiveJobHere.set(wait: delay).perform_later('your-action')
end
在我们的应用程序中,我们公开了一个回调路由供外部服务访问。当我们收到回调时,我们使用 client/browser-side 上的事件源向客户端订阅者发布更新,并在服务器端抽筋。然而,有时我们会收到来自该外部服务的回调请求的轰炸,这导致我们向客户端发布大量更新。在 Rails 端有没有一种方法,类似于 javascript 去抖功能,可以在收到的回调之间等待一段设定的时间来发布消息?
我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具的建议。
有 Sidekiq-debounce gem 可用。
另一种方法(没有这种 gem)是使用 Rails.cache
每 x 次仅触发一次执行
delay = 1.minute
Rails.cache.fetch('unique-identifier-of-the-job', expires_in: delay) do
YourActiveJobHere.set(wait: delay).perform_later('your-action')
end