簡體   English   中英

Rails Resque運行后台作業-如何加速應用程序

[英]Rails Resque to run background job - How it speeds up the App

我遵循了有關在Raiscast上進行Resque的教程: http: //railscasts.com/episodes/271-resque

在教程中,有一個關於代碼突出顯示的示例,該代碼突出顯示在controller的#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應用程序。 但是,我不太了解為什么/如何將這段代碼移出控制器來加速應用程序。 它看起來只是將其從控制器移動到另一個庫。 誰能向我解釋?

如果您查看應用程序在做什么,它將調用外部應用程序(pygments.appspot.com)進行突出顯示。

假設此網站非常受歡迎,因此需要20秒才能做出響應。 使用控制器中的代碼,您的應用程序將花費您處理響應所花費的時間,以及從pygments中獲取20秒鍾后用戶才能看到響應。

當您將其移至后台作業時,這20秒現在發生在后台,用戶將能夠看到響應,但不會突出顯示語法。 如果突出顯示完成后他們在20秒內刷新,則他們將看到它。

因此,要回答您的問題,將代碼移至應用程序中的其他位置並不是提高速度的原因。 該代碼無法更快地運行。 將代碼移至background job意味着對速度的影響不會影響對用戶的響應時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM