Je donne les résultats suivants dans un contrôleur Rails:Dois-je m'attendre à ce que Comet soit aussi lente?
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
puis je Javascript effectuer une requête AJAX. La requête reste là pendant 20 secondes ou jusqu'à ce que la méthode du contrôleur trouve un enregistrement dans la base de données, en attente. Ça marche.
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();
}
});
}
Lorsque 5 à 10 onglets sont ouverts dans mon navigateur, mon application Web devient très lente.
Est-ce normal? Ou y a-t-il des améliorations évidentes que je peux faire?