langsame Seitengenerierung
lachesis
- php
Hallo,
Ich habe vor geraumer Zeit einen rel. komplizierten elektronischen Stundenzettel
erstellt.
Zu Beginn wurde die Seite in ca. 1 Sekunde aufgebaut.
Jetzt habe ich in den letzten Wochen einige kleine Funktionen
hinzugefügt und mußte mit erschrecken feststellen, dass nun manchmal bis
zu 5 Sekunden vergehen bis die Seite erstellt ist.
Wie geht man vor um die "Zeitfresser" zu lokalisieren?
Ich wüßte nämlich schon gerne wo der Haken liegt.
Grüßle, lach
Ich würde eine Logdatei anlegen und bei dem Programmlauf immer wieder an geeigneten Stellen Kontrollausgaben in diese Logdatei machen. Dabei kannst Du zusätzlich immer die Systemzeit auslesen und mit hinein schreiben.
Das verlangsamt zwischendurch die Ausführung zwar nochmal aber relativ solltest Du Zeitfresser finden.
Hello,
Ich würde eine Logdatei anlegen und bei dem Programmlauf immer wieder an geeigneten Stellen Kontrollausgaben in diese Logdatei machen. Dabei kannst Du zusätzlich immer die Systemzeit auslesen und mit hinein schreiben.
Das verlangsamt zwischendurch die Ausführung zwar nochmal aber relativ solltest Du Zeitfresser finden.
Genau. Da schau Dir mal register_tick_function() und die recht ausführlichen Userbeispiele an.
Diese Tick-Setter kannst Du überall in Deinem Script unterbrigen. Ich würde sie gleich bedingt von einer Konstante if (TICKDEBUG [== true]) o.ä. aktivieren, dann kannst Du sie später zur Not auch drin lassen im Script.
Grüße
Tom
Hallo lachesis,
Wie geht man vor um die "Zeitfresser" zu lokalisieren?
Ich wüßte nämlich schon gerne wo der Haken liegt.
phpedit hat eine funktion, die dir anzeigt, welche codeteile wieviel zeit brauchen.
adresse? google. ;-)
freundl. Grüße aus Berlin, Raik
Hallo,
Danke für die wirklich hilfreichen Tipps.
Ich hab das jetzt mal ganz simpel implementiert,
indem das Script an speziellen Punkten kommentierte Zeiten in ein
Textfile schreibt.
Dabei zeigt sich der Übeltäter ganz deutlich.
Diese Abfrage benötigt mehr als 1.5 Sekunden.
SELECT pid, left(pname,25) as ppname, left(name,10) as nname, pnr, max(datum) AS maxdatum
FROM stunden, projektnr, kunden
WHERE pid = projektnr.id AND kid = kunden.id AND close = 0 AND gedeckt!=3
GROUP BY pid
HAVING maxdatum > (date_sub(current_date, INTERVAL 30 DAY))
ORDER BY nname
Leider hab ich keine Ahnung wie ich die schneller hinbekomme.
Ehrlichgesagt war ich froh sie überhaupt hin zu bekommen ;-)
Grüßle, lach
Hallo,
ein geeigneter Index auf der Datenbank sollte helfen. Für einen Datenbankserver sollte so eine Abfrage eigentlich ein Witz sein, probleme gibt es erst bei riesen Datenmengen oder massig parallelen Zugriffen.
Gruss
Marko
Hallo Marko,
ich dachte auch, dass dies eigentlich nicht der Rede wert wäre. Schließlich
greifen nie mehr als 7 Leutchen gleichzeitig zu.
Während meinen Tests war ich sogar der Einzige!
Welche Indizes würdest Du denn anlegen?
Grüßle, lach