Performancemessung einer Webanwendung
Marko
- software
0 peterS.
Hallo Forum,
ich suche ein Tool, mit dem ich die Antwortzeiten und Übertragungszeiten einer Webanwendung auf der Ebene des HTTPS Aufzeichnen kann (auf Seite des Clients nicht des Servers).
Mein Ziel wäre in etwa ein LOG-Datei mit den Daten:
Zeitpunkt Request Nr X
Zeitpunkt der Antwort des Servers auf Request X
Ende der Übertagung für Request X
Brauch ich da einen Sniffer, ich hab mir mal den Ethereal installiert, weiss aber irgendwie nicht, wie ich an die benötigten Daten komme.
Kann mir jemand eine geignete Software nennen, die unter WIN NT 4 läuft, nach Möglichkeit Shareware oder Freeware, kann aber auch kommerziell sein.
Gruss und Danke
Marko
gruss Marko,
ich suche ein Tool, mit dem ich die Antwortzeiten und
Übertragungszeiten einer Webanwendung ... Aufzeichnen
kann (auf Seite des Clients nicht des Servers).
Mein Ziel wäre in etwa ein LOG-Datei mit den Daten:
Zeitpunkt Request Nr X
Zeitpunkt der Antwort des Servers auf Request X
Ende der Übertagung für Request X
mit clientseitigem javascript koenntest Du ein messwerk-
zeug schreiben, welches den response annaeherungsweise
ermitteln kann und auch die anderen von Dir geforderten
daten erhebt;
Du benoetigst z.b. eine datei "clientsideWebPerformance.html",
die auf dem client eine testreihe Dir auf dem server bekannter
seitenn zusammenstellt, d.h.: Du kennst die namen der webdoku-
mente und deren groessen;
diese beiden parameter packst Du dann z.b in das array
"testRequestArray" der datei "clientsideWebPerformance.html";
die zeitmessung beginnt mit dem aufruf einer dieser seiten
aus dem array;
eine zwischenzeit (die fuer den angenaehrten server-response)
wird genommen, sobald die ersten zeilen dieser speziell prepa-
rierten seiten eintrudeln;
die zeitmessung stoppt mit dem eintreffen der letzten zeilen
der angeforderten dokumente;
aus den zeitdifferenzen koennen z.b. die "responseTime" und
die "sessionTime" (oder "totalTime") bestimmt, und im oben
besprochenen array abgelegt werden;
nach dem komplettdurchlauf der testreihe kann man sich an
die auswertung der im "testRequestArray" gespeicherten daten
machen;
fuer die seite "clientsideWebPerformance.htm" koennte der
code dann so aussehen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>clientsideWebPerformance.html</title>
<script type="text/javascript" language="JavaScript">
<!--
var testRequestArray = [[["testRequest01.html"],[171.32]],[["testRequest02.html"],[110.63]],[["testRequest03.html"],[302.25]]]; // beliebig fortfuehrbar;
var testRequestIndex = 0;
var timeRequestStarts = 0;
var timeRespondStarts = 0;
var timeRequestEnds = 0;
var testWin = null;
function startPerformanceTest() {
if (testRequestIndex < testRequestArray.length) {
if ((testWin == null) || (testWin.closed)) {
testWin = window.open("","","width=375,height=385,status");
}
testWin.location.href = (testRequestArray[testRequestIndex][0].toString());
timeRequestStarts = new Date().getTime();
} else {
endPerformanceTest();
}
}
function endPerformanceTest() {
if ((!testWin.closed) || (testWin != null)) {
testWin.close();
}
testWin = window.open("","","width=670,height=215,scrollbars");
testWin.document.open("text/html");
testWin.document.write(getTestResult());
testWin.document.close();
}
function writePerfomanceLog() {
testRequestArray[testRequestIndex][2] = (timeRespondStarts-timeRequestStarts); // responseTime;
testRequestArray[testRequestIndex][3] = (timeRequestEnds-timeRequestStarts); // requestTime / sessionTime / totalTime;
++testRequestIndex;
startPerformanceTest();
}
function getTestResult() {
var totalDocumentSize = 0;
var totalSessionTime = 0;
var text = '';
text += '<html>\n\n<head>\n<title>performanceLog</title>\n</head>\n\n<body>\n<p align="center">\n';
text += '<table cols="5" rows="' + (testRequestArray.length+1) + '" cellspacing="0" cellpadding="7" border="1" bordercolor="#000000">\n';
text += '<tr>\n';
text += '\t<td align="right"><b>document-name</b></td>\n';
text += '\t<td align="right"><b>document-size</b></td>\n';
text += '\t<td align="right"><b>response-time</b></td>\n';
text += '\t<td align="right"><b>total-time</b></td>\n';
text += '\t<td align="right"><b>document-capacity</b></td>\n';
text += '</tr>\n';
for (var i=0;i<testRequestArray.length;i++) {
totalDocumentSize += parseFloat(testRequestArray[i][1]);
totalSessionTime += parseFloat(testRequestArray[i][3]);
text += '<tr>\n';
text += '\t<td align="right">' + testRequestArray[i][0] + '</td>\n';
text += '\t<td align="right">' + testRequestArray[i][1] + ' kByte</td>\n';
text += '\t<td align="right">' + (Math.round(parseFloat(testRequestArray[i][2])/10)/100) + ' sec</td>\n';
text += '\t<td align="right">' + (Math.round(parseFloat(testRequestArray[i][3])/10)/100) + ' sec</td>\n';
text += '\t<td align="right">' + (Math.round(parseFloat(testRequestArray[i][1])/(parseFloat(testRequestArray[i][3])/1000)*100)/100) + ' kB/sec</td>\n';
text += '</tr>\n';
}
text += '<tr>\n';
text += '\t<td colspan="4" align="right"><b>average-session-capacity : </b></td>\n';
text += '\t<td align="right"><b>' + (Math.round(totalDocumentSize/(totalSessionTime/1000)*100)/100) + '</b> kB/sec</td>\n';
text += '</tr>\n';
text += '</table>\n</p>\n</body>\n\n</html>';
return text;
}
//-->
</script>
</head>
<body onload="startPerformanceTest()">
<br><br><br><br><br><br><br><br><br><br><br>
<p align="center">performance-test<br><br>das test-fenster waehrend der messung<br>bitte nicht schliessen - !!absturzgefahr!!</p>
</body>
</html>
eine Deiner testseiten muesste dann mit entsprechend viel text
bepackt so aussehen, wobei die script-einlassungen sowohl am
anfang als auch am ende dieser seiten bestehen bleiben muessen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>testRequest01.html</title>
<script type="text/javascript" language="JavaScript">
<!--
if (self.opener) {
opener.timeRespondStarts = new Date().getTime();
var isOk = true;
}
//-->
</script>
</head>
<body onload="if(isOk){opener.writePerfomanceLog();}">
<!--
hier muss moeglichst viel text dazwischen,
so dass die datei "testRequest01.html" am
besten zwischen 60 und 200 kByte gross ist;
die uebertragungszeit wird schon am dateiende gestoppt,
da der "onload"-event ja erst mit dem vollstaendigen
aufbau des dokuments gefeuert wird;
//-->
</body>
<script type="text/javascript" language="JavaScript">
<!--
if (isOk) {opener.timeRequestEnds = new Date().getTime();}
//-->
</script>
</html>
damit Du das auch gleich mal testen kannst, habe ich das
ergebnis des heutigen abends unter diese adresse gepackt:
http://www.pseliger.de/themen/colorPicker/clientsideWebPerformance.html
die zugangsdaten lauten [ selfhtml / selfhtml ];
dabei handelt es sich um einen testdurchlauf ueber 3 reine
html-files mit groessen von 171kByte, 111kByte und 302kByte;
viel spass - tschuess und by(t)e by(t)e - peterS.