0

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 アプリの高速化に役立ちます。ただし、そのコードをコントローラーから移動するとアプリが高速化される理由/方法がよくわかりません。コントローラーから別のライブラリに移動するだけです。誰か私に説明できますか?

4

1 に答える 1

4

アプリケーションが何をしているのかを見ると、ハイライトを実行するために外部アプリケーション (pygments.appspot.com) を呼び出しています。

このサイトが非常に人気があり、その結果、応答に 20 秒かかっているとします。コントローラー内のコードをそのまま使用すると、アプリケーションは応答を処理するのにかかる時間に加えて、ユーザーが応答を確認する前に pygments から 20 秒かかります。

これをバックグラウンド ジョブに移動すると、その 20 秒間がバックグラウンドで実行され、ユーザーは応答を確認できますが、構文の強調表示は行われません。強調表示が完了してから 20 秒以内に更新すると、それが表示されます。

したがって、あなたの質問に答えるために、コードをアプリケーション内の別の場所に移動しても、速度が向上するわけではありません。コードの実行速度は速くなりません。コードを に移動するbackground jobと、速度への影響がユーザーへの応答時間に影響しなくなります。

于 2012-09-27T14:44:53.343 に答える