Ich habe einen AJAX-Tester für eine einzelne Datei geschrieben. Geniesse es!!! Nur weil ich Probleme mit meinem Hosting-Anbieter hatte
<?php /*
Author: Luis Siquot
Purpose: Check ajax performance and errors
License: GPL
site5: Please don't drop json requests (nor delay)!!!!
*/
$r = (int)$_GET['r'];
$w = (int)$_GET['w'];
if($r) {
sleep($w);
echo json_encode($_GET);
die ();
} //else
?><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var _settimer;
var _timer;
var _waiting;
$(function(){
clearTable();
$('#boton').bind('click', donow);
})
function donow(){
var w;
var estim = 0;
_waiting = $('#total')[0].value * 1;
clearTable();
for(var r=1;r<=_waiting;r++){
w = Math.floor(Math.random()*6)+2;
estim += w;
dodebug({r:r, w:w});
$.ajax({url: '<?php echo $_SERVER['SCRIPT_NAME']; ?>',
data: {r:r, w:w},
dataType: 'json', // 'html',
type: 'GET',
success: function(CBdata, status) {
CBdebug(CBdata);
}
});
}
doStat(estim);
timer(estim+10);
}
function doStat(what){
$('#stat').replaceWith(
'<table border="0" id="stat"><tr><td>Request Time Sum=<th>'+what+
'<td> /2=<th>'+Math.ceil(what/2)+
'<td> /3=<th>'+Math.ceil(what/3)+
'<td> /4=<th>'+Math.ceil(what/4)+
'<td> /6=<th>'+Math.ceil(what/6)+
'<td> /8=<th>'+Math.ceil(what/8)+
'<td> (seconds)</table>'
);
}
function timer(what){
if(what) {_timer = 0; _settimer = what;}
if(_waiting==0) {
$('#showTimer')[0].innerHTML = 'completed in <b>' + _timer + ' seconds</b> (aprox)';
return ;
}
if(_timer<_settimer){
$('#showTimer')[0].innerHTML = _timer;
setTimeout("timer()",1000);
_timer++;
return;
}
$('#showTimer')[0].innerHTML = '<b>don\'t wait any more!!!</b>';
}
function CBdebug(what){
_waiting--;
$('#req'+what.r)[0].innerHTML = 'x';
}
function dodebug(what){
var tt = '<tr><td>' + what.r + '<td>' + what.w + '<td id=req' + what.r + '> '
$('#debug').append(tt);
}
function clearTable(){
$('#debug').replaceWith('<table border="1" id="debug"><tr><td>Request #<td>Wait Time<td>Done</table>');
}
</script>
</head>
<body>
<center>
<input type="button" value="start" id="boton">
<input type="text" value="80" id="total" size="2"> concurrent json requests
<table id="stat"><tr><td> </table>
Elapsed Time: <span id="showTimer"></span>
<table id="debug"></table>
</center>
</body>
Bearbeiten:
r bedeutet Zeile und w Wartezeit.
Wenn Sie zum ersten Mal die Starttaste 80 (oder eine andere Anzahl) der gleichzeitigen Ajax-Anforderung drücken, werden diese über Javascript gestartet, aber bekanntlich werden sie vom Browser gespoolt. Außerdem werden sie parallel zum Server angefordert (auf eine bestimmte Anzahl beschränkt, dies ist die Tatsache dieser Frage). Hier werden die Anfragen serverseitig mit einer zufälligen Verzögerung (festgelegt durch w) gelöst. Zur Startzeit wird die gesamte Zeit berechnet, die zum Lösen aller Ajax-Anrufe benötigt wird. Wenn der Test abgeschlossen ist, können Sie sehen, ob er die Hälfte, den dritten, ein Viertel usw. der Gesamtzeit in Anspruch genommen hat, abzüglich der Parallelität bei den Aufrufen an den Server. Dies ist weder streng noch präzise, aber es ist schön, in Echtzeit zu sehen, wie Ajax-Anrufe abgeschlossen werden (siehe eingehendes Kreuz). Und ist ein sehr einfaches, in sich geschlossenes Skript, das die Grundlagen von Ajax zeigt.
Dies setzt natürlich voraus, dass die Serverseite kein zusätzliches Limit einführt.
Verwenden Sie es vorzugsweise in Verbindung mit dem Firebug Net Panel (oder dem Äquivalent Ihres Browsers).