我在我的控制器中有这个动作:
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后台作业..
我该怎么办?
答案 0 :(得分:2)
由于views
真的是一个反击,你应该看看:
http://apidock.com/rails/v3.2.13/ActiveRecord/CounterCache/increment_counter
在你的情况下它应该是这样的
Reklamer.increment_counter(:views, @reklame.id)
它应该只更新视图列,不运行验证,回调等,这将使它更快。但另一方面,简单保存的3s表示还存在其他问题。
答案 1 :(得分:0)
首先,试试:
@reklame.update_attribute :views, @reklame.views + 1
看看是否有帮助。如果是这样,那么你有一些昂贵的数据验证正在减慢你的速度,但至少你知道问题的根源。
如果这不起作用,请尝试在
中包装该语句Thread.new { //code }
如果执行保存仍然很慢,那么可能是您的数据库设置方式或类似的方式。