Performance Fresser

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Performance Fresser

Beitrag von witzigerkiller »

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
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.
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Re: Performance Fresser

Beitrag von Banger »

witzigerkiller hat geschrieben:Hallo, ich wollte mal fragen(hab gegoogelt aber nix gefunden) welche php funktionen man vermeiden soll, und was alles performance weggnimmt..
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:Also ich hab mir sagen lassen das reguläre ausdrücke im zusammenhang mit preg_replace() stark performance fressen... ist das richtig`?
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: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?
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).

Ein Schlusswort noch: Deine Rechtschreibung, Satzbau und Zeichensetzung sind für den Leser wahre Performancefresser. ;-)
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

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.
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag von witzigerkiller »

alles klar, 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.
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag von BB-BF-BM »

vielleicht kannst du auch hier und vor allem hier mal reinschauen
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag von witzigerkiller »

hey cool, danke...

jetzt weiß ich das ich immer in mysql nur die benötigten felder und nicht immer
SELECT *
nehmen sollte und das in switch schleifen, das was am häufigsten verwendet wird ganz oben ist... bei mir ist es das default..

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.
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von Banger »

witzigerkiller 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..
switch und if sind Konstrukte, keine Schleifen! Schreib das 100x auf, damit Du es nicht vergisst ;-)

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.
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag von witzigerkiller »

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:
steht in dem von dir geschriebenen 2ten link..
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.
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von Banger »

witzigerkiller hat geschrieben:
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:
steht in dem von dir geschriebenen 2ten link..
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? ;-)

BTW: ich hab den Link nicht gepostet.

EDIT: schau mal in die Kommentare zu dem Artikel - der Autor hat's selbst begriffen :)
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag von Jensemann »

Banger hat geschrieben: switch und if sind Konstrukte, keine Schleifen! Schreib das 100x auf, damit Du es nicht vergisst ;-)
Bringt leider wenig in Zeiten in denen selbst Informatik-Lehrer von if Schleifen sprechen.

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?
Antworten

Zurück zu „Coding & Technik“