私はRails 3.2からストリーミングダウンロード(CSV)を行っています。最初のページリクエストの問題に対して、長い時間がかかります。次のコントローラのコードは私の問題を示しています。以上によりRails 3.2 streaming
self.response_body = Enumerator.new do |y|
10_000_000.times do
y << "Hello World"
end
end
を、応答が(...ユニコーン、私の場合はそれをサポートすることができますよりも、サーバーから)そのストリーミングのように見えるん。それは、ストリーミングが始まる前に、私が望む時間よりもはるかに長い時間です。私は次のように変更した場合、それははるかに高速に起動します:
self.response_body = Enumerator.new do |y|
1000.times do
y << "Hello World"
end
end
私の理解では、応答は、ループの最初の繰り返しで始めなければならないことですが、大きなループが初期ロード時間を長くすることを引き起こしているようです。各反復が起こったときに出力される場合、ストリーミングプロセスを開始するのにかかる時間は同じではありません。
ありがとうございました。
編集:
ここでは、私が試みている技術について説明します。たぶん私はステップを誤解または行方不明です?: http://facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399
EDIT:
を私はラックキャッシュが私の問題を引き起こしている可能性があります...私は、個々の要求のためにそれをオフにすることができると思い?
EDIT解か:
私は、ラックのキャッシュについて間違っていました。私はちょうど私の応答にself.response.headers['Last-Modified'] = Time.now.ctime.to_s
を追加する必要がありました。
、私はそれを得ることはありません。このコードは、別の列挙子から1つの列挙子を作成し、response_body変数を割り当てます。右にあるものは最初に実行されます(あなたが魔法のメタ情報を持っていない限り)。あなたが入れた番号が大きいほど時間がかかります。あなたはストリーミングをするために何かもっと必要ですが、私は自分で提案しません。 – froderik
あなたは既にhttp://api.rubyonrails.org/classes/ActionController/Streaming.htmlをチェックアウト済みでしょう。 – froderik
上記のテクニックの説明については、上記のリンクを参照してください。 –