如何创建类似于 javascript 节流/去抖动功能的 Rails/Ruby 方法
Posted
技术标签:
【中文标题】如何创建类似于 javascript 节流/去抖动功能的 Rails/Ruby 方法【英文标题】:How to create a Rails/Ruby method similar to javascript throttle/debounce function 【发布时间】:2015-11-22 06:54:11 【问题描述】:在我们的应用程序中,我们公开了一个回调路由以供外部服务访问。当我们收到回调时,我们使用客户端/浏览器端的 Eventsource 和服务器端的 cramp 向客户端订阅者发布更新。然而,有时我们会被来自这个外部服务的回调请求轰炸,这导致我们向客户端发布大量更新。在 Rails 端有没有一种方法,类似于 javascript debounce 函数,可以在收到的回调之间等待一段设定的时间来发布消息?
我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具提出建议。
【问题讨论】:
【参考方案1】:有一个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
【讨论】:
有趣的方法,@MaximKrizhanovsky!我会试试缓存方法。 虽然缓存是个好主意,而且我喜欢它背后的简单性,但它不适用于任何类型的负载均衡器或其他有多个 Rails 实例的情况,如果它必须被去抖动应用程序以上是关于如何创建类似于 javascript 节流/去抖动功能的 Rails/Ruby 方法的主要内容,如果未能解决你的问题,请参考以下文章