[英]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.