Ich habe einen AJAX-Tester für eine einzelne Datei geschrieben. Viel Spaß damit!!! 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>
Editer :
r bedeutet Zeile und w Wartezeit.
Wenn Sie anfangs auf die Start-Schaltfläche drücken, werden 80 (oder eine beliebige andere Anzahl) gleichzeitiger Ajax-Anfragen von Javascript ausgelöst, aber wie bekannt, werden sie vom Browser gespooled. Außerdem werden sie parallel zum Server angefordert (begrenzt auf eine bestimmte Anzahl, darum geht es in dieser Frage). Hier werden die Anfragen serverseitig mit einer zufälligen Verzögerung (festgelegt durch w) gelöst. Zu Beginn des Tests wird die Zeit berechnet, die benötigt wird, um alle Ajax-Aufrufe zu bearbeiten. Wenn der Test beendet ist, kann man sehen, ob er die Hälfte, ein Drittel, ein Viertel usw. der Gesamtzeit benötigt hat, wobei die Parallelität der Aufrufe an den Server abgezogen wird. Dies ist weder streng noch präzise, aber es ist schön, in Echtzeit zu sehen, wie Ajax-Aufrufe abgeschlossen werden (und das eingehende Kreuz zu sehen). Und ist ein sehr einfaches, in sich geschlossenes Skript, das die Grundlagen von Ajax zeigt.
Dies setzt natürlich voraus, dass serverseitig keine zusätzlichen Beschränkungen eingeführt werden.
Vorzugsweise in Verbindung mit Firebug Net Panel (oder dem entsprechenden Programm Ihres Browsers) verwenden