2013-07-08 1 views
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 объявления. Этот код очень быстрый. Проблема в том, что, когда я пытаюсь использовать пример count, ответ становится ОЧЕНЬ медленным. 3s. По сравнению с 200 мс!

@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

Возможно, вам следует предоставить код вашей попытки использовать фоновое решение. –

+0

Я просто попытался назвать одно из моих уже существующих фоновых заданий, и это замедлило реакцию на 2,8 с. –

ответ

2

С views действительно счетчик может быть, вы должны смотреть на:

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

В вашем случае это должно выглядеть следующим образом

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

Необходимо обновить только просматривает колонки, дон 'запускать проверки, обратные вызовы и т. д., что сделает его быстрее. Но, с другой стороны, 3s при простом сохранении указывает на то, что что-то еще происходит не так.

0

Во-первых, попробуйте:

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

Смотрите, если это помогает. Если это так, то у вас есть дорогостоящие проверки данных, которые замедляют вас, но, по крайней мере, вы знаете источник проблемы.

Если это не сработает, попробуйте оберточной это заявление в

Thread.new { //code } 

Если он по-прежнему медленно делает сохранить, то это, вероятно, как ваша база данных настроена или что-то вдоль этих линий.

Смежные вопросы