【问题标题】:Rails Resque to run background job - How it speeds up the AppRails Resque 运行后台作业 - 它如何加速应用程序
【发布时间】:2012-09-28 00:15:58
【问题描述】:

我在 Raiscast 上关注了这个关于 Resque 的教程:http://railscasts.com/episodes/271-resque

在教程中,有一个关于代码荧光笔的示例,它位于控制器的 #create 方法中:

def create
  @snippet = Snippet.new(params[:snippet])
  if @snippet.save
    uri = URI.parse('http://pygments.appspot.com/')
    request = Net::HTTP.post_form(uri, {'lang' => @snippet.language, 'code' => @snippet.plain_code})
    @snippet.update_attribute(:highlighted_code, request.body)
    redirect_to @snippet, :notice => "Successfully created snippet."
  else
    render 'new'
  end
end

据说

“通过 Rails 请求与外部服务通信是 通常是一个坏主意,因为他们可能会回复缓慢,因此会占用您的 整个 Rails 进程和任何其他尝试连接的请求 它。将外部请求移到外部请求要好得多 过程。我们将设置 Resque,以便我们可以将请求移动到 Resque 工作人员。”

它想说的是:Resque 有助于加快 Rails 应用程序的速度。但是,我不太明白为什么/如何将这段代码移出控制器来加速应用程序。它寻找我只是将它从控制器移动到另一个库。谁能给我解释一下?

【问题讨论】:

    标签: ruby-on-rails controller resque worker


    【解决方案1】:

    如果您查看应用程序正在做什么,它正在调用外部应用程序 (pygments.appspot.com) 来执行突出显示。

    让我们假设这个网站很受欢迎,因此需要 20 秒才能做出响应。使用控制器中的代码,您的应用程序将花费您处理响应所需的时间,再加上从 pygments 开始的 20 秒,然后您的用户才能看到响应。

    当您将其移至后台作业时,这 20 秒现在发生在后台,用户将能够看到响应,但不会突出显示语法。如果突出显示完成后他们在 20 秒内刷新,那么他们会看到它。

    因此,要回答您的问题,将代码移动到应用程序中的其他位置并不能加快速度。代码不会运行得更快。将代码移至background job 意味着对速度的影响不会影响对用户的响应时间。

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 2016-08-03
      • 2011-06-17
      • 2018-05-19
      相关资源
      最近更新 更多