2010-11-24 11 views
0

Je cherche à comprendre combien de temps il faut pour faire une requête AJAX, quand un bouton est cliqué jusqu'à présent, j'ai ce code:Calculez combien de temps il faut pour faire une requête AJAX

$(document).ready(function() { 
    $('#start').click(function() { 
     start_timer(); 
     var record = $.ajax({url: "ajax.php?getSensor="+devid, async: false }).responseText; 
     $("textarea#recordTextbox").val($('textarea#recordTextbox').val()+record+"\n"); 
     stoptimer(); 
    }); 
}); 

Et mes fonctions de minuterie ressemblent à ceci:

function start_timer() { 
    display(); 
} 
function stoptimer() { 
    clearTimeout(timer); 
    timer = 0; 
} 
function display(){ 
    if (millisec>=9){ 
    millisec=0 
    seconds+=1 
    } 
    else 
    millisec+=1 
    $("#time").html(seconds + "." + millisec); 
    timer = setTimeout("display()",100); 
    } 

la requête AJAX est envoyée correctement, mais la minuterie 0,1 seconde à chaque fois lit, je sais que cela prend plus de temps que cela parce que la page se bloque pendant au moins 3 secondes. Pour une raison quelconque, la minuterie ne fonctionne pas lorsque vous quittez son affaire AJAX.

Un conseil aiderait, merci!

+2

Je sais qu'il s'agit d'une solution de rechange à ce que vous essayez d'accomplir, mais dans Google Chrome, vous pouvez afficher les temps de réponse en appuyant sur CTRL-SHIFT-J et en visualisant la console. Cela, ou vous pouvez utiliser le plugin FireBug pour FireFox ou Chrome. – Dutchie432

+0

Très utile, merci –

Répondre

1

Je ne pouvais pas cette minuterie pour travailler, donc j'ai utilisé Date() getTime() comme ceci:.

var start_time = new Date().getTime();  
    $.ajax({url: "ajax.php?getSensor="+devid, async: false, success: function(data){ 
     $("textarea#recordTextbox").val($('textarea#recordTextbox').val()+data+"\n"); 
     request_time = new Date().getTime() - start_time; 
    }}); 
    $("#time").html(request_time/1000); 
3

Vous pouvez faire cela plus facile avec une requête asynchrone en tant que tel:

$(document).ready(function() { 
    $('#start').click(function() { 
     start_timer(); 
     $.ajax({url: "ajax.php?getSensor="+devid, async: false, success: function(data){ 
      $("textarea#recordTextbox").val($('textarea#recordTextbox').val()+data+"\n"); 
      stoptimer(); 
     }}); 
    }); 
}); 
+1

Oui, la raison pour laquelle la minuterie dans la publication de l'OP ne fonctionne pas est parce qu'elle n'est pas arrêtée dans le rappel AJAX. –

+0

Donc, pour une raison quelconque, il montre toujours .1 de seconde chaque fois que les outils de développement de chrome montre ~ 2,5 secondes pour chaque requête, peut-être mon code de minuterie est foutu? Aussi, vous avez dit que je pourrais utiliser une requête asynchrone mais nous avons toujours async: false dans le code, est-ce exprès? Désolé pour le code –

+0

Eh bien merci pour votre code, mais cela ne marche pas:/Quand je commente complètement stoptimer, le timer s'arrête à 0.1 secondes jusqu'à ce que la requête ajax soit terminée et continue ensuite à monter –

1

Si vous faites cela pour aider le développement, utilisez firebug.

+0

C'est pour un web application que je fais, mais merci pour la suggestion, firebug est très utile –

+0

l'onglet ressources de l'inspecteur webkit (safari/chrome) fonctionne aussi. – generalhenry

+0

Oui, j'ai vu qu'ils ont apporté quelques améliorations à la façon dont vous pouvez maintenant modifier css à la volée qui n'était pas là avant –

0

Il suffit de lancer YSlow dessus.

Pour une approche générale pour déterminer ce qui ne va pas avec vos chargements de page et vos requêtes AJAX, utilisez le YSlow addon for Firefox.

Il vous montrera des choses dont vous n'avez jamais rêvé qui ralentissent votre code.