【问题标题】:How to create a Rails/Ruby method similar to javascript throttle/debounce function如何创建类似于 javascript 节流/去抖动功能的 Rails/Ruby 方法
【发布时间】:2015-11-22 06:54:11
【问题描述】:

在我们的应用程序中,我们公开了一个回调路由以供外部服务访问。当我们收到回调时,我们使用客户端/浏览器端的 Eventsource 和服务器端的 cramp 向客户端订阅者发布更新。然而,有时我们会被来自这个外部服务的回调请求轰炸,这导致我们向客户端发布大量更新。在 Rails 端有没有一种方法,类似于 javascript debounce 函数,可以在收到的回调之间等待一段设定的时间来发布消息?

我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具提出建议。

【问题讨论】:

    标签: ruby-on-rails ruby debouncing cramp eventsource


    【解决方案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 实例的情况,如果它必须被去抖动应用程序
    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2012-07-13
    • 2018-02-16
    • 1970-01-01
    • 2019-11-11
    • 2017-11-13
    • 2015-03-03
    • 2011-12-24
    相关资源
    最近更新 更多