Performance Fresser
- witzigerkiller
- Gesperrt
- Beiträge: 878
- Registriert: 05.02.2005 13:27
- Wohnort: Sonthofen
Performance Fresser
Hallo, ich wollte mal fragen(hab gegoogelt aber nix gefunden) welche php funktionen man vermeiden soll, und was alles performance weggnimmt..
Also ich hab mir sagen lassen das reguläre ausdrücke im zusammenhang mit preg_replace() stark performance fressen... ist das richtig`?
Und, wie siehts mit mysql aus, man soll ja immer diese `und` in sql befehlen geben, wenn man die weggläst schluckt das auch performance?
Meine datei, includet 5 dateien führt 4 sql query´s aus, und hat eine länge von: 103 zeilen.. da kommen noch 3 while und 1 for schleife for sowie 20 zeilen regex..
Die generationsdauer ist immer zwischen 0.07 und 0.10
bei mir ladet das zwar schnell aber auch hier hab ich mir sagen lassen das ich unter 0.05 kommen sollte..
Leider habe ich keine Seite gefunden wo erklärt wird, was in php performance fressen kann..
Kann mir da jemand einige Tipps und Tricks geben/zeigen, oder hat vllt. eine Seite im Internet?
Danke
Also ich hab mir sagen lassen das reguläre ausdrücke im zusammenhang mit preg_replace() stark performance fressen... ist das richtig`?
Und, wie siehts mit mysql aus, man soll ja immer diese `und` in sql befehlen geben, wenn man die weggläst schluckt das auch performance?
Meine datei, includet 5 dateien führt 4 sql query´s aus, und hat eine länge von: 103 zeilen.. da kommen noch 3 while und 1 for schleife for sowie 20 zeilen regex..
Die generationsdauer ist immer zwischen 0.07 und 0.10
bei mir ladet das zwar schnell aber auch hier hab ich mir sagen lassen das ich unter 0.05 kommen sollte..
Leider habe ich keine Seite gefunden wo erklärt wird, was in php performance fressen kann..
Kann mir da jemand einige Tipps und Tricks geben/zeigen, oder hat vllt. eine Seite im Internet?
Danke
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
- Banger
- Ehemaliges Teammitglied
- Beiträge: 375
- Registriert: 03.05.2005 21:53
- Wohnort: Düsseldorf
- Kontaktdaten:
Re: Performance Fresser
Eins vorweg: generelle Aussagen lassen sich zu diesem Thema nicht treffen, sondern nur an Stellen, wo man zwei oder mehr Algorithmen/Funktionen für das gewünschte Ergebnis zur Verfügung hat, zwischen denen man wählen kann.witzigerkiller hat geschrieben:Hallo, ich wollte mal fragen(hab gegoogelt aber nix gefunden) welche php funktionen man vermeiden soll, und was alles performance weggnimmt..
RegExps sind nicht trivial, das stimmt soweit und rührt schon allein von der Tatsache her, dass das Suchmuster geparsed werden muss. Das Dogma lautet hier: vermeide reguläre Ausdrücke, wenn Du sie nicht wirklich brauchst, d.h.: wenn Du nur feste Zeichenketten ersetzen willst (z.B. '<b>' durch '<strong>', verwende statt dessen das ungleich schnellere str_replace().witzigerkiller hat geschrieben:Also ich hab mir sagen lassen das reguläre ausdrücke im zusammenhang mit preg_replace() stark performance fressen... ist das richtig`?
Nein. Mit den Backticks maskierst Du Datenbank-, Tabellen- und Feldnamen. Das wird spätestens dann unabdingbar, wenn Du reservierte Wörter als Namen verwendest (z.B. day, month oder date).witzigerkiller hat geschrieben:Und, wie siehts mit mysql aus, man soll ja immer diese `und` in sql befehlen geben, wenn man die weggläst schluckt das auch performance?
Ein Schlusswort noch: Deine Rechtschreibung, Satzbau und Zeichensetzung sind für den Leser wahre Performancefresser.

Um einfach begriffe zu suchen eignet sich am besten strpos, dannach preg_match, ereg soll am meisten fressen.
Zum ersetzen eignet sich str_replace() am besten (für einfache Begriffe, ab PHP5 auch stri_replace()) sonst natürlich ereg_replace oder preg_replace.
Ansonsten kannst du mal php.net studieren.
Bei MySQL ist mysql_unbuffered_query als mysql_query.
Und vermeide MySQL Abfragen in Schleifen. Dadurch produziert nur unnötig viele Querys.
Zum ersetzen eignet sich str_replace() am besten (für einfache Begriffe, ab PHP5 auch stri_replace()) sonst natürlich ereg_replace oder preg_replace.
Ansonsten kannst du mal php.net studieren.
Bei MySQL ist mysql_unbuffered_query als mysql_query.
Und vermeide MySQL Abfragen in Schleifen. Dadurch produziert nur unnötig viele Querys.
- witzigerkiller
- Gesperrt
- Beiträge: 878
- Registriert: 05.02.2005 13:27
- Wohnort: Sonthofen
- witzigerkiller
- Gesperrt
- Beiträge: 878
- Registriert: 05.02.2005 13:27
- Wohnort: Sonthofen
hey cool, danke...
jetzt weiß ich das ich immer in mysql nur die benötigten felder und nicht immer
DAnke habs zwar teils nur überflogen hab aber viel rausbekommen.
jetzt weiß ich das ich immer in mysql nur die benötigten felder und nicht immer
nehmen sollte und das in switch schleifen, das was am häufigsten verwendet wird ganz oben ist... bei mir ist es das default..SELECT *
DAnke habs zwar teils nur überflogen hab aber viel rausbekommen.
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
- Banger
- Ehemaliges Teammitglied
- Beiträge: 375
- Registriert: 03.05.2005 21:53
- Wohnort: Düsseldorf
- Kontaktdaten:
switch und if sind Konstrukte, keine Schleifen! Schreib das 100x auf, damit Du es nicht vergisstwitzigerkiller hat geschrieben:nehmen sollte und das in switch schleifen, das was am häufigsten verwendet wird ganz oben ist... bei mir ist es das default..

Außerdem halte ich diese Angabe für ausgemachten Mumpitz, denn um in den default-fall zu verzweigen, müssen die anderen Fälle auch erst geprüft werden.
- witzigerkiller
- Gesperrt
- Beiträge: 878
- Registriert: 05.02.2005 13:27
- Wohnort: Sonthofen
steht in dem von dir geschriebenen 2ten link..5. Umfangreiche Switch-Statements sollten nach Häufigkeit geordnete Case-Elemente besitzen. Die Laufzeit wird verkürzt, wenn die am häufigst wahrscheinlichen Elemente oben stehen. Sie werden halt schneller gefunden. Zudem sollte die Default-Angabe ganz oben stehen, wenn davon ausgegangen werden kann, dass die Default-Angabe am häufigsten zutrifft.
Beispiel:
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
- Banger
- Ehemaliges Teammitglied
- Beiträge: 375
- Registriert: 03.05.2005 21:53
- Wohnort: Düsseldorf
- Kontaktdaten:
Ja und? Es stimmt dennoch nicht. Denk einfach mal kurz, aber intensiv darüber nach, welche Bedingung vorhanden sein muss, damit in den default-fall verzweigt wird... na, klingelt's?witzigerkiller hat geschrieben:steht in dem von dir geschriebenen 2ten link..5. Umfangreiche Switch-Statements sollten nach Häufigkeit geordnete Case-Elemente besitzen. Die Laufzeit wird verkürzt, wenn die am häufigst wahrscheinlichen Elemente oben stehen. Sie werden halt schneller gefunden. Zudem sollte die Default-Angabe ganz oben stehen, wenn davon ausgegangen werden kann, dass die Default-Angabe am häufigsten zutrifft.
Beispiel:

BTW: ich hab den Link nicht gepostet.
EDIT: schau mal in die Kommentare zu dem Artikel - der Autor hat's selbst begriffen

Bringt leider wenig in Zeiten in denen selbst Informatik-Lehrer von if Schleifen sprechen.Banger hat geschrieben: switch und if sind Konstrukte, keine Schleifen! Schreib das 100x auf, damit Du es nicht vergisst![]()
Aber was zum Thema preg_*:
In Python kann man Reguläre Ausdrücke erst kompilieren, so dass das parsen bei wiederholter Verwendung nur einmal anfällt, in PHP scheint das nicht möglich. Jemand Ahnung ob PHP wiederholte RegExp selbst cached?