2011-08-14 4 views
1

私はHerokuのHTTPキャッシュを理解しようとしています。 their articleを読んだ後、私はCache-Control HTTPヘッダがどのように機能しているのか不思議です。ヘッダはコントローラのアクションに設定されている資料のsample application mentionedキャッシュコントロールヘッダーとHeroku Dynamicイメージ

:画像がされているようなので、私には見え

def data 
    qrcode = RQRCode::QRCode.new(self.message, :size => self.version, :level => self.ecc.to_sym) 
    qrcode.to_s 
    end 

def image 
    @qrimage = QRImage.find_by_md5(params[:md5]) 
    if @qrimage 
     headers['Cache-Control'] = 'public; max-age=2592000' # cache image for a month 
     send_data @qrimage.data, :filename => @qrimage.filename, :disposition => 'inline', :type => "image/png" 
    else 
     render :nothing => true, :status => 404 
    end 
end 

@qrimage.dataためのコード等であります毎回サーバー上で生成されます。その後、ブラウザで1か月間キャッシュされます。したがって、ここで唯一の節約は、同じビジターが同じイメージを表示しようとするときです。

異なるユーザーが同じイメージを表示しようとすると、それは引き続き生成され、送信されます。あなたが私に尋ねるなら、本当に役立つものではありません。

私の理解は正しいのですか、サイトの訪問者ごとに同じ画像が再生成されませんか?

答えて

2

AspenおよびBambooスタックのHerokuアプリは、ワニス( HTTPアクセラレータ)の前にあります。 Varnishは、アプリケーションの出力を の標準HTTPヘッダーで提供されるキューに従ってキャッシュし、 ページのキャッシュ可能性を記述します。これらのヘッダーは、ブラウザで使用されているヘッダーと同じものです( )。したがって、これらのヘッダーを正しく設定すると、Herokuの場合:ワニス層で、さらにユーザの ブラウザでは、アプリケーションに スピードの倍増を与えます。

あなたがわからない場合、Varnishはアプリケーションとインターネットとの間に非常に高速なキャッシュです。ヘッダがキャッシュするのが安全だと言うと、Varnishはそれを行い、キャッシュされたオブジェクトを使って追加のリクエストに応答します。

+0

ワニスはすべての訪問者のためにイメージをキャッシュしておきます。ブラウザキャッシュは、最初の訪問後に訪問者のイメージを保持しますか? – SooDesuNe

+0

はい。ワニスには、セッションや特定の訪問者の概念はありません。それは、誰にとっても同じことです。ブラウザはそれ自身のためにキャッシュするため、要求/サーバーへの負荷が軽減されます。 – coreyward

+0

ユーザーにセッションクッキーを設定した場合(Rack:セッションは空ではなく、GoogleアナリティクスでもCookieが削除されます)、ワニスはこれらのヘッダーを無視してリクエストがアプリにヒットします。 – stef