У меня есть следующее в контроллере Rails:
def poll
records = []
start_time = Time.now.to_i
while records.length == 0 do
records = Something.uncached{Something.find(:all,
:conditions => { :some_condition => false})}
if records.length > 0
break
end
sleep 1
if Time.now.to_i - start_time >= 20
break
end
end
responseData = []
records.each do |record|
responseData << {
'something' => record.some_value
}
# Flag message as received.
record.some_condition = true
record.save
end
render :text => responseData.to_json
end
и затем у меня есть Javascript, выполняющий запрос AJAX. Запрос находится там в течение 20 секунд или пока метод контроллера не найдет запись в базе данных, ожидая. Это работает.
function poll() {
$.ajax({
url: '/my_controller/poll',
type: 'GET',
dataType: 'json',
cache: false,
data: 'time=' + new Date().getTime(),
success: function(response) {
// show response here
},
complete: function() {
poll();
},
error: function() {
alert('error');
poll();
}
});
}
Когда в моем браузере открыто 5-10 вкладок, мое веб-приложение становится очень медленным.
Этого и следовало ожидать? Или есть какие-то очевидные улучшения, которые я могу сделать?