0

コントローラーに次のアクションがあります。

def ad

    @koder = @side.reklamers.pluck(:id) - [session[:log]]
    @reklame = Reklamer.find(@koder.sample)
    session[:log] = @reklame.id
    render :text => "<span class='bannerid' data-id='#{@reklame.id}'></span><p style='margin-bottom: 7px;margin-top: 7px;font-size: 9px;text-align: center !important;'>Ad</p>#{@reklame.kode}"

 end

HTML 広告をレンダリングします。このコードは本当に高速です。問題は、カウントビューを例にしようとすると、応答が非常に遅くなることです。3秒。200msに比べて!

@koder = @side.reklamers.pluck(:id) - [session[:log]]
@reklame = Reklamer.find(@koder.sample)
session[:log] = @reklame.id
@reklame.views += 1
@reklame.save
render :text => "<span class='bannerid' data-id='#{@reklame.id}'></span><p style='margin-bottom: 7px;margin-top: 7px;font-size: 9px;text-align: center !important;'>Ad</p>#{@reklame.kode}"

同じ結果で resque バックグラウンド ジョブを追加しようとしました。

私は何をすべきか?

4

2 に答える 2

2

は実際にはカウンターなのでviews、次を確認する必要があります。

http://apidock.com/rails/v3.2.13/ActiveRecord/CounterCache/increment_counter

あなたの場合、次のようになります

Reklamer.increment_counter(:views, @reklame.id)

ビュー列のみを更新し、検証やコールバックなどを実行しないでください。これにより、高速になります。しかし一方で、単純な保存での 3 秒は、他にも問題が発生していることを示しています。

于 2013-07-08T17:00:59.887 に答える