PHP Performance Problem

  • Ersteller Ersteller + BELA B. +
  • Erstellt am Erstellt am
B

+ BELA B. +

Gast
Hi Leute,

Frage. Ich hab eine Website programmiert für einen Sportverein.
Der Server liegt bei Kilu.

Jetzt ist aber das Problem, dass die Website teilweise echt laaang lädt.

Gibt es PHP-Technisch tipps und tricks um das ganze zu beschleunigen?
Und ja, es sind jede Menge SQL Querys, aber ich denke die sind im Rahmen des möglichen (pro Seiten aufruf vil 5-6 Querys die aber von einer DB-Klasse verwaltet werden - die Klasse haben ich und ein Freund gebaut, funktioniert auch blitzartig)

Ich hab auch noch andere Websites auf Kilu Webspace's und die laden deutlich schneller....

Also wenn jemand nen Rat hat bitte her damit! :)

lg
 
Mach mal ne Zeitmessung der Datenbankperformance in dem du vor und nach jedem mysql_query die Zeit misst und nach dem Scriptablauf anzeigst. Dazu noch die gesamte Scriptlaufzeit.
 
Deine Informationen sind sehr spärlich.

Sind es bestimmte Seiten die lang laden oder ist es immer so? Ist die Datenbank groß (d.h. viele Einträge in einer bestimmten Tabelle?).

Eine Idee wäre auch noch, mal ein Benchmark laufen zu lassen, ob es wirklich das Seite rendern oder das ausliefern ist.

Hast du die Seite "live" (d.h. auf dem Server, auf dem sie abgespielt wird) entwickelt oder in einer Entwicklungsumgebung?
 
5-6 Querys sind eigentlich okay. Kommt aber halt auch drauf an, ob ihr den DB-Server alleine nutzt oder ob der mit anderen Seiten geteilt wird. Interessant wäre natürlich auch wie viele Leute zu Spitzenzeiten parallel zugreifen.
 
Naja welche Infos sollt ich noch angeben, sorry is schon spät und der TAg war anstrengend ^^

Naaaja, grundsätzlich gibt es schon Seiten die länger laden, aber im Endeffekt sind alle relativ langsam.
zur info: in die Index wird per include immer eine Content-Site enthalten mit den jeweiligen Funktionen.

Puh mit solchen Benchmarks hab ich leider keine Erfahrung, kennst du einen? Einen der mir nichts löscht?

JA die Seite ist Live auf einem Server und das schon seit einem halben Jahr. Und je mehr weiter entwickelt wurde, desto langsamer wurde sie. Die Datenbank... naja groß ist relativ, es gibt schon jede menge einträge... wie seh ich die größe der DB?

Link: www.ardning.at/tus

@benn
Das weiß ich leider nicht wie das bei kilu gemanaged wird!
Spitzen Zeiten sind täglich ca an die 30 - 50 Besucher täglich,
und im Schnitt sag ich mal so 5 User zugleich... also nicht wirklich arg....
 
Zuletzt bearbeitet:
5 User gleichzeitig :D Das schafft selbst ein Taschenrechner (wenn man MySQL installieren könnte). Also da wird der Provider wohl den Server an mehrere Leute gleichzeitig vermieten ;)


EDIT: ahh. es gibt natürlich noch eine Möglichkeit:
Sind eure Querys optimiert? Also habt ihr drauf geachtet, was ihr abfragt und WIE ihr es macht?
Natürlich sollte man in einer DB auch nicht die Keywords zur Indizierung vergessen!
 
:D ja drum denk ich mir ja :D :D
das wird der provider auch, aber trotzdem ging das ganze schon mal flotter ^^

ich mein, 5 User.... oO
Geh mal drauf, du wirst sehn wie lang das braucht zum laden -.-

EDIT
Wie meinst du das?


@Enigma
Eine Zeitmessung ist in der Website,
rechts unten, sieht man schwer, steht ganz klein dort die Aufbauzeit.
 
Zuletzt bearbeitet:
Naja, du kannst eine Datenbank einfach und gut ODER total umständlich abfragen. (Sollte bei der Userzahl nun auch nicht das Problem sein), aber nur mal so als Anhaltspunkt!

Besonders wenn "JOIN" verwendet wird (also outter join, left join, right join, etc.)


EDIT: wie ich gerad sehe:
Das gesamte JavaScript ist 10x so lang wie der HTML Code ;)
Du könntest das mal probehalber entfernen, wenns dann läuft, weißte wie der Hase läuft. Aber EIGENTLICH sinds ja auch nur ein paar Byte!
 
Zuletzt bearbeitet:
ah ok.

Ehm join? mit diesem Join hab ich gar nicht gearbeitet, ich weiß nicht mal wie man das verwendet bzw was das ist.
Ich mach immer normale querys, inserts oder updates?!?


EDIT
Welchen Javascript, kannst mir sagen WAS genau JS mäßig? ^^
ps: sollte erwähnt sein das Prototyp mit JSON oft verwendet wird =))
 
Okay, dann 1. schau dir mal JOIN an. Vielleicht kannst du damit einige Querys vereinfachen. Damit kann der MySQL Server dann Optimierungen durchführen und es KÖNNTE schneller werden (aber so viel?!?!).

2. Die Zeitmessung ist NUR in JS oder? D.h. der fängt an wenn der Browser die Daten schon bekommen hat. Du misst also nur wie lang das Rendering und Nachladen der Grafiken dauert. Eine Zeitmessung im PHP Code wäre sinnvoller. Dann siehst du wie lang der Server gebraucht hat um das Dokument zu erstellen.

3. Ich weiß nicht genau was von dem JS Code wirklich gebraucht wird, aber hier sind die Tags im Code:
Code:
<script language="JavaScript" type="text/javascript" src="/js/editor/wysiwyg.js"></script> 
<script type="text/javascript" src="/js/scroll_1.0.js"></script>
und
Code:
<script language="JavaScript" type="text/javascript" src="/js/lib/prototype.js"></script> 
<script language="JavaScript" type="text/javascript" src="/js/src/scriptaculous.js"></script> 
<script language="JavaScript" type="text/javascript" src="/js/javas.js"></script> 
<script language="JavaScript" type="text/javascript" src="/js/tooltip.js"></script>
 
1. ja ok mach ich morgen wenn ich vom krankenhaus daheim bin (feierabend) xD

2. ne, die zeitmessung ist im php code, vor ob_start() und nach ob_End_flush() jeweils davor bzw danach.
sprich das ist die aufbauzeit des dokuments. NAchgeladen wird NUR der Liveticker (oben mitte)

gebraucht wird von den javascripts eigentlich alles, sunst läuft nix so wies soll. aber wird js nicht eh beim client gespeichert bzw gecached?
 
Das Caching hängt natürlich vom Browser und seinen Einstellungen ab ;)

Hm, und wenn du den Ticker mal probehalber entfernst? Vielleicht ist das der Übeltäter ?



Also ich krieg bei der Aufbauzeit immer ca. 1.5 bis 1.6 Sekunden. Das ist an sich deutlich zu lange! Also wird wohl der PHP Code schuld sein...
Am besten da dann Zeitmessungen um die Querys einbauen, dann sieht man wohl ob die so viel Zeit brauchen oder obs der Rest ist ;)
 
ah oke.

Der Ticker ladet eh erst dann, wenn der Rest der Website steht. Ich hab den auch schon mal deaktiviert, aber nichts... bleibt gleich.

Ja, aber ich hab kA wie ich den PHP Code verbessern kann... hmm..
Wie soll ich die Zeitmessungen einbaun? Direkt in meiner DB Klasse? WEnn ja WIE?
ICh hab sowas noch nie gemacht ^^
 
Ich weiß ja nicht genau wie du deine Querys aufrufst, aber eigentlich so:
Code:
aktuelle Zeit erfassen
QUERY STARTEN oder eben der Funktionsaufruf der das Query an die DB schickt und aufs Ergebnis wartet
aktuelle Zeit erfassen
Zeiten subtrahieren und Ergebnis ausgeben lassen
 
beachte das du nicht allein auf dem webserver bist
unter der ip adresse deiner page sind ca 14k weitere pages gehostet
daher sind es nicht nur 5 user die auf den webserver zugreifen.
 
@benn a ok, also so:
zeit1
$db->query("irgendeinquery");
zeit2
zeit2-zeit1 oder?

@albert
ja schon , aber wenns schon mal flotter gint?
 
ja,genau!

und wenn du irgenwo, die Ergebnisse deines ersten Querys nimmst und dazu verwendest ein 2tes Query zu starten solltest du evtl. JOIN in Betracht ziehen ;)
 
Möglicherweise liegts auch wirklich einfach an der Auslastung...ich habe gerade jeden Link der Hauptnavigationsleiste ausprobiert und zusätzlich paar die unter den Punkten zu finden waren.

Im Schnitt waren die alle zwischen 1 - 4 Sekunden offen, was meiner Meinung nach für einen Hoster wie kilu, wo wirklich viel auf einem Server läuft, absolut in Ordnung ist.


Als kleiner Vergleich:

Ich habe eine Seite, die 8 MySQL-Queries durchführt, jeder davon ruft min. 50 Datensätze ab, der größte Query ruft (sortiert!) 1.200 Datensätze ab.

Diese Datensätze enthalten statistische Größen wie z.B. Pingwerte in ms um dauerhaft die Erreichbarkeit und die Reaktionsgeschwindigkeit des Servers zu analysieren.

Dürften insgesamt also etwa aktuell 1.500 Datensätze sein, die alle beispielsweise 'nen Pingwert (in ms) enthalten und noch andere Sachen.

Alleine für die Pingwerte (1.500 Stck) errechne ich per PHP den Median, den Mittelwert, oberes und unteres Quartil, die Standardabweichung sowie den Durchschnitt der mittleren 50% der Daten u.s.w.


Die komplette Seite mit allen Queries und Berechnungen ist im Schnitt in 0.35s geladen...allerdings läuft diese Page auch auf einem VServer, der vom Rootserver die Serverfestplatten nutzt sowie 16GB Ram, 4x 3.0 GHz CPU u.s.w.

Bei 'nem kostenlosen kilu kannst du dich freuen, wenn du mal 96MB RAM und 100 MHz von einer CPU alleine hast..



Von einer kostenlosen Page unter kilu, wo dann letztenendes sehr sehr viele andere den gleichen Server mitbenutzen, darfst dir keine Perfomancewunder erhoffen..
 
Zuletzt bearbeitet:
+ BELA B. + schrieb:
JA die Seite ist Live auf einem Server und das schon seit einem halben Jahr. Und je mehr weiter entwickelt wurde, desto langsamer wurde sie. Die Datenbank... naja groß ist relativ, es gibt schon jede menge einträge... wie seh ich die größe der DB?

klingt sehr stark nach DB-Problemen ;)
Eine Datenbank verhält sich mit verschiedenen Datenmengen verschieden. Hattest du also nur ein paar Einträge und einen schlechten Query geschrieben, der keinen Index nutzt, kann alles noch blitzschnell gewesen, da eben auch nur wenige Daten untersucht werden mussten.
Steigt dann aber die Datenmenge werden die schlechten Querys schlagartig zu Performancefressern und können ganze Server killen, hab ich bei Kunden schon oft genug gesehen.
 
hat zwar nicht was mit php zu tun aber steigert auch die performance!

1) schau dir mal dein html Grundgerüst an! Da gibts nicht mal ein html tag. der doctype steht im header, header in blockbuchstaben. veralteter doctype
2) installier die mal firebug + page speed von google. das add on anaylsiert die deine webseite und sagt die wo du was verbessern kannst
 
Zurück
Oben