Schlechte Performance
Gunther Blenk
- html
0 Phil Z.
Hallo erstmal.
Um es gleich am Anfang zu sagen: Ich habe zu diesem Thema schon einmal einen Beitrag geschrieben. Neue Erkenntnisse versetzen mich jedoch in die Lage, meine Frage zu präzisieren. Es geht darum, daß eine bestimmte Seite in einem kleinen Projekt häufig sehr, sehr lange zum Laden braucht. Man hat mir empfohlen mit Hilfe der PHP-Funktion time() einzugrenzen, wo der Fehler sich befindet. Ich habe daraufhin folgendes gemacht: Direkt nach <body> mache ich ein PHP-Skript auf und lasse als erstes die Zeit mittels time() anzeigen. Danach werden einige GET-Variablen in einer Tabelle angezeigt. Das nötige HTML wird in echo-Befehlen erzeugt. Dann lasse ich wieder die Zeit mittels time() anzeigen und schließe das Skript. Gleich danach endet die Seite mit </body></html>. Aufgrund dieses Experiments kann ich wohl ausschließen, daß das Problem im PHP-Skript liegt, denn die Ausführung des Skripts geht immer sehr schnell, auch wenn die Seite etwa eine Minute zum Laden braucht. Woran liegt's also? Habe ich einen Fehler im Kopf (wahrscheinlich!)? Ich habe natürlich in SELFHTML gründlich nachgelesen was alles in den Kopf hineingehört. Aber vielleicht habe ich doch etwas vergessen? Zuerst kommt die DOCTYPE-Deklaration, dann <html><head><title>Titel</title>, danach habe ich zwei meta-tags gesetzt (http-equiv="content-type" ... und http-equiv="Content-Style-Type" ...). Schließlich binde ich noch ein externes css-Stylesheet ein und schließe den Kopf mit </head>.
Um es noch einmal zu betonen: Alle anderen Seiten meines kleinen Projekts, die meistens etwas anspruchsvoller sind als die 'Problemseite', zeigen eine gute Performance. Was kann ich noch tun, um das Problem zu beheben?
Vielen Dank für die Hilfe!
Gunther Blenk
P. S.
Mich wundert auch, daß die Seite mehrmals hintereinander langsam geladen wird, denn ich war der Meinung, daß einmal geladene Seiten sich im Cache befinden und von dort schnell geladen werden können. Ist dies bei Seiten mit Query-String etwa anders? Oder liegt es daran daß der Seitenaufruf im Rahmen einer PHP-Session erfolgt?
Hallo.
Was kann ich noch tun, um das Problem zu beheben?
Uns den ganzen Quelltext zeigen. Vor allem die PHP und Javascirpt Codes die drin stecken, dort stecken meist die Performance-Stopper.
mfg
Phil Z.
Hallo.
Was kann ich noch tun, um das Problem zu beheben?
Uns den ganzen Quelltext zeigen. Vor allem die PHP und Javascirpt Codes die drin stecken, dort stecken meist die Performance-Stopper.
Nun ja, warum auch nicht? Hier also der gesamte relevante Code:
Der Aufruf der Seite erfolgt in einem Frameset aus einem anderem Frame (namens Maske) heraus:
parent.Buchstabe.location.href="Buchstabe1.php?PHPSESSID="+sessid+
"&B=ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß _.,-";
Buchstabe1.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<? session_start() ?>
<html><head><title>Buchstabenlisting</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="formate.css">
<script src="klick.js" type="text/javascript">
</script>
</head>
<body onfocus="Klick3();" onclick="Klick3();" ondblclick="Klick3();">
<?
$start = date("h:i:s");
if (!isset($_GET['B'])){
$_GET['B'] = '';
}//if (!isset($_GET['B']))
$buchstabe=$_GET['B'];
if(isset($_SESSION['hoehe']) && isset($_SESSION['breite'])){
$hoehe = $_SESSION['hoehe'];
$breite = $_SESSION['breite'];
}//if(isset($_SESSION['hoehe']) && isset($_SESSION['breite']))
else{
die("Die Session wurde unterbrochen!");
}//else
$auswahl=0; ?>
<div style='height:<?=$hoehe?>px; width:<?=$breite?>px; margin-top:0px; margin-left:0px;'>
<?php
echo "<table cellpadding='7' cellspacing='0' border='8' align='left' style='margin-top:20px; margin-left:20px;'>";
echo "<tr bgcolor='#DB8176'>";
echo "<td align='center'><b>0</b></td>";
echo "<td align='center' colspan='5'>Zurück</td>";
echo "</tr>";
while (strlen($buchstabe)>0){
$auswahl++;
echo "<tr bgcolor='#A3F3F9'>";
echo "<td align='center' bgcolor='#DB8176'><b>$auswahl</b></td>";
for($x=5;$x>0;$x--){
$ausdruck=substr($buchstabe,0,1);
$buchstabe=substr($buchstabe,1);
echo "<td align='center'><b>$ausdruck</b></td>";
}//for($x=5;$x>0;$x--)
echo "</tr>";
}//while strlen($buchstabe)>0
echo "<tr bgcolor='#DB8176'>";
echo "<td align='center'><b>,</b></td>";
echo "<td align='center' colspan='5'>Buchstabe löschen</td>";
echo "</tr>";
echo "</table>";
$tiempo = date("h:i:s");
$dureza = $start - $tiempo;
echo "$dureza";
?>
</div>
</body>
</html>
klick.js:
function Klick1(){
if(parent.parent.fokus == "Fenster1"){
self.focus();
}//if(parent.parent.fokus == "Fenster1")
else if(parent.parent.fokus == "Maske"){
parent.Maske.focus();
}//else if(parent.parent.fokus == "Maske")
else if(parent.parent.fokus == "Buchstabe"){
parent.Buchstabe.focus();
}//else if(parent.parent.fokus == "Buchstabe")
}//function Klick1()
function Klick2(){
if(parent.parent.fokus == "Fenster1"){
parent.Fenster1.focus();
}//if(parent.parent.fokus == "Fenster1")
else if(parent.parent.fokus == "Maske"){
self.focus();
}//else if(parent.parent.fokus == "Maske")
else if(parent.parent.fokus == "Buchstabe"){
parent.Buchstabe.focus();
}//else if(parent.parent.fokus == "Buchstabe")
}//function Klick2()
function Klick3(){
if(parent.parent.fokus == "Fenster1"){
parent.Fenster1.focus();
}//if(parent.parent.fokus == "Fenster1")
else if(parent.parent.fokus == "Maske"){
parent.Maske.focus();
}//else if(parent.parent.fokus == "Maske")
else if(parent.parent.fokus == "Buchstabe"){
self.focus();
}//else if(parent.parent.fokus == "Buchstabe")
}//function Klick3()
Die Datei klick.js verhindert, daß man durch Mausklick oder Tabulator-Taste den Focus auf einen Frame verlegt wird, der gerade nicht auf Tastatureingaben wartet.
Buchstabe1.php zeigt die verfügbaren Zeichen an. Durch einen ersten Tastendruck entscheidet man sich für eine Fünfer-Zeichengruppe (z. B. 1: A, B, C, D, E). Drückt man dann z. B. nochmals die 1 wird ein A in ein Textfeld im Frame Maske eingefügt. Diesen Vorgang steuert eine Javascript-Funktion im Frame Maske. Die Datei Buchstabe1.php dient nur dazu, dem User anzuzeigen, welcher Tastendruck was bewirkt. Dadurch, daß die Steuerung und die Anzeige der verfügbaren Zeichen in zwei verschiedenen Frames abläuft, muß der (schon geübte) User nicht auf die Anzeige warten sondern kann schneller eingeben.