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)

它应该只更新视图列,不要运行验证、回调等,这将使其更快。但另一方面,简单保存的 3s 表明还有其他问题。

于 2013-07-08T17:00:59.887 回答
0

第一次尝试:

@reklame.update_attribute :views, @reklame.views + 1

看看是否有帮助。如果是这样,那么您正在进行一些昂贵的数据验证,这会减慢您的速度,但至少您知道问题的根源。

如果这不起作用,请尝试将该语句包装在

Thread.new { //code }

如果保存速度仍然很慢,那么可能是您的数据库设置方式或类似的东西。

于 2013-07-08T17:43:03.687 回答