mabue88
Goto Top

Apache2 - langsamer Seitenaufbau

Hallo,

ich habe vor einiger Zeit schon mal zu dem Thema geschrieben (Seitenaufbau beschleunigen - Apache Webserver). Damals lag es an der Datenbank. Das kann ich diesmal aber ausschließen.

Hier mal die Beschreibung von dem alten Thread:

Ich habe einen Apache-Server. Eine Webseite (Übersichtsseite) zeigt eine Übersicht diverser Informationen an. Für die Darstellung der Informationen wurde eine HTML erstellt (Informationsseite), die in Abhängigkeit von den empfangenen URL-Parametern die jeweiligen Informationen anzeigen. Der Aufbau dieser Informationsseiten ist ziemlich schlicht. In einem übergeordneten DIV befinden sich 4 weitere DIVs, mit denen die Informationen positioniert werden. Insgesamt befinden sich auf der Übersichtsseite rund 80 Objects, in welchen die jeweiligen Informationsseiten geladen werden. Das funktioniert alles soweit.


Wie gesagt, damals war die Datenbank die Bremse. Das kann ich nun aber ausschließen.

Zum Testen habe ich dem gesamten AJAX-Teil in den Informationsseiten auskommentiert. Das heisst, beim Laden der Seiten wird lediglich ein GET-Parameter ausgelesen und dieser in ein DIV geschrieben (mit Javascript).

Das Laden der Seite benötigt aber trotzdem bis zu 6 Sekunden... (obwohl keine Daten von der Datenbank geholt werden).

Hat jemand einen Tipp für mich?

Content-Key: 264055

Url: https://administrator.de/contentid/264055

Printed on: April 19, 2024 at 17:04 o'clock

Member: B.Nutzer
B.Nutzer Feb 20, 2015 at 09:26:36 (UTC)
Goto Top
Hast Du einen Link?
Member: mabue88
mabue88 Feb 20, 2015 at 09:30:44 (UTC)
Goto Top
Hallo B.Nutzer,

hab vergessen zu schreiben, dass die Webseite nicht im Netz liegt, sondern nur im Intranet verfügbar ist...
Member: wiesi200
wiesi200 Feb 20, 2015 at 09:30:45 (UTC)
Goto Top
Hallo,

der Tipp ist der gleiche wie beim letzten Mal.
Mit deinen Informationen kann man dir leider keine Vernünftigen Ratschläge geben. Das muss man genau analysieren was so lange braucht.
Alles andere ist nur Rätselraten und nicht Produktiv.
Member: mabue88
mabue88 Feb 20, 2015 at 09:47:14 (UTC)
Goto Top
Hallo wiesi200,

kannst du mir einen Hinweis geben, wie ich so eine Analyse angehe?

Danke
Member: wiesi200
wiesi200 Feb 20, 2015 at 09:52:47 (UTC)
Goto Top
Drück mal bei IE oder Firefox die Taste F12 und Messe die Reaktionsfähigkeit der Benutzeroberfläche bzw mach ne Laufzeitanalyse.

Dann siehst du eigentlich genau was wie lange braucht.
Member: EinsteinJunior
EinsteinJunior Feb 20, 2015 at 09:54:38 (UTC)
Goto Top
Hallo,

vielleicht erst mal mit Tools wie Fiddler auf der Clientseite schauen und dann mal auf dem Apache Server die Auslastung, Netzwerkdurchsatz, ...
Evtl. befindet sich dein Problem auch im OSI-Modell weiter unten, sprich Kabel, Switch, ...

Gruß
Marko
Member: mabue88
mabue88 Feb 20, 2015 updated at 10:24:20 (UTC)
Goto Top
Ich habe das mal für die Informationsseite alleine gemacht. Hier das Ergebnis: http://www.directupload.net/file/d/3904/jk5nouc2_png.htm

Auf der Übersichtsseite wird diese Informationsseite rund 80 mal mit unterschiedlichen Parametern geladen.

Hast du Erfahrungen bezüglich den Zeiten?
Member: EinsteinJunior
EinsteinJunior Feb 20, 2015 at 10:35:06 (UTC)
Goto Top
Verstehe ich das richtig. 80mal die 134ms? 40% nimmt ja schon Scripting (JavaScript?) ein. JavaScript läuft aber auf dem Client ab und nicht am Webserver.
Sind das so aufwendige Scripts?

VG Marko
Member: mabue88
mabue88 Feb 20, 2015 updated at 10:40:05 (UTC)
Goto Top
Meiner Meinung nach sind die Scripts nicht wirklich aufwändig:

function init(){
	var info = GetInfoVonParameter();

	if(info == null)
	{
		alert("Keine Info empfangen!");  
		return;
	}

	SetInfo(info);
}

function SetInfo(new_info){
	document.getElementById("info_text").innerHTML = new_info;  
}

function GetParameter(){
	var query = window.location.search.substring(1);
	query = unescape(query);
	return query.split("&");  
}

function GetInfoVonParameter(){
	var parameters = GetParameter();

	for (var i = 0 ; i < parameters.length ; i++) {
		var pair = parameters[i].split("=");  
		if (pair == "rufname") {  
			return pair[1];
		}
	}

	return null;
}
Member: EinsteinJunior
EinsteinJunior Feb 23, 2015 at 06:43:37 (UTC)
Goto Top
Das Script ist nicht wirklich aufwendig.
Welche Leistungsdaten hat der Server? Hast du dir schon mal die Auslastung des Server angeschaut?

VG Marko
Member: Cthluhu
Cthluhu Feb 23, 2015 at 10:05:33 (UTC)
Goto Top
Hallo,
Zitat von @mabue88:
Hat jemand einen Tipp für mich?

Check mal die DNS Einstellungen. Wenns da timeouts hagelt kann auch ein einfacher Seitenaufbau schon ma länger dauern.

mfg

Cthluhu
Member: mabue88
mabue88 Feb 23, 2015 at 13:05:34 (UTC)
Goto Top
Als Server wird eine virtuelle Maschine verwendet. Hier mal die Daten, die ich aus dem OS habe (Basisdaten über den Computer):
- Windows 7 64Bit
- Intel Xeon CPU E5-2650 v2 @ 2.60GHz 2.60GHz
- 2 GB RAM

Die Maschine hat durchweg eine CPU-Auslastung zwischen 20 und 30% und eine RAM-Auslastung von ca. 60%. (Daten stammen aus dem Taskmanager)


Ich habe nochmal eine Frage zu dem Bild, das ich vor einigen Post zur Verfügung gestellt habe. Darauf ist im Kuchendiagramm das recht große gelbe Stück mit der Bezeichnung "Scripting" zu sehen. Bezieht sich dieses Scripting auf die Scripts, die auf dem Client ablaufen, oder auch die Scripts, die auf dem Server ablaufen?

Danke
Member: EinsteinJunior
EinsteinJunior Feb 23, 2015 at 13:12:47 (UTC)
Goto Top
Zitat von @mabue88:
Ich habe nochmal eine Frage zu dem Bild, das ich vor einigen Post zur Verfügung gestellt habe. Darauf ist im Kuchendiagramm
das recht große gelbe Stück mit der Bezeichnung "Scripting" zu sehen. Bezieht sich dieses Scripting auf die
Scripts, die auf dem Client ablaufen, oder auch die Scripts, die auf dem Server ablaufen?

Danke

... auf dem Client.

VG
Member: mabue88
mabue88 Feb 23, 2015 at 19:43:35 (UTC)
Goto Top
Verstehe ich das richtig, dass somit rund 40% der Zeit für das Ausführen von Scripts auf dem Client benötigt werden?
Member: EinsteinJunior
EinsteinJunior Feb 24, 2015 at 06:24:16 (UTC)
Goto Top
Deshalb ja meine Frage, ob das aufwendige Scripts sind. Verwendest du irgendwelche Frameworks (jQuery, ...)?

VG Marko
Member: wiesi200
wiesi200 Feb 24, 2015 at 06:59:39 (UTC)
Goto Top
Jap, genau so ist es.
Member: mabue88
mabue88 Mar 02, 2015 at 12:48:26 (UTC)
Goto Top
Ich habe jetzt eine Lösung, die zumindest augenscheinlich deutlich schneller ist.

Bislang habe ich jeder Informationsseite per Parameter die Informationen gegeben, welche Daten sie aus der Datenbank holen soll. Der Parameter wurde von der Übersichtsseite beim Aufrufen der Informationsseite entsprechend übergeben.
Das habe ich nun abgeändert.
Jetzt lädt die Übersichtsseite alle Informationen, die für die auf der Seite dargestellten Informationsseiten benötigt werden. Diese Daten werden gefiltert. Alle Daten, die in den Informationsseiten benötigt werden, werden nun von der Übersichtsseite per GET-Parameter übergeben.

Pro Browserfenster, das die Übersichtsseite anzeigt, wird nun nur noch eine Verbindung zur Datenbank aufgebaut, und nicht ca. 80 wie vorher (als jede Informationsseite eine eigene Verbindung zur Datenbank aufbaute). Zudem habe ich den Datenaustausch zwischen Javascript und PHP (Ajax) nach der Comet-Methode abgeändert.
Von PHP wird somit nur dann auf einen AJAX-Request geantwortet, wenn in der Datenbank tatsächlich aktualisierte Daten vorliegen.
Der Vollständigkeit wegen erwähne ich noch die Ausnahme! Erkennt das PHP-Skript innerhalb von 30 Sekunden keine aktualisierten Daten in der Datenbank, werden die "alten" Daten vom PHP-Skript an Javascript zurückgegeben. Javascript erkennt dann aber, dass es sich um die gleichen Daten wie bei dem vorherigen Request handelt und führt entsprechend keine Aktualisierung durch.

Empfängt Javascript innerhalb von 60 Sekunden, nachdem ein Request gestartet wurde keine Daten, so geht es davon aus, dass die Verbindung zum PHP-Skript unterbrochen wurde und startet einen neuen Request.


Seit dieser Umstellung läuft die Seite deutlich schneller und hatte bislang auch noch keine Fehlfunktion.