Du bist hier:  Seitenreport    Forum    Web-Entwicklung    PHP & MySQL    PHP Performance steigern

PHP Performance steigern

Verfasst am: 19. 05. 2011 [18:49]
Ultima
867 Beiträge
Fachinformatiker / Anwendungsentwicklung
Dabei seit: 09.07.2010

✓ Seitenreport Vorantreiber
Themenersteller

Beitrag hilfreich?

Hallo alle zusammen,

weil ich viel Wert auf Performance lege war ich Heute mal wieder auf der Suche um eine neue Methode zu finden die Performance von meinen PHP Programmen weiter zu steigern.

So wirklich fündig bin ich aber nicht geworden, von daher würden mich eure Erfahrungen dazu interessieren. Und bitte nicht einfach nur irgendwelche Links, gegoogled hab ich schon den ganzen Tag, sogar bei Yahoo ....


Viele Grüße
Thomas



Mein Portal: Ultima-Project.net


Verfasst am: 19. 05. 2011 [20:26]
UFOMelkor
353 Beiträge
Student
Dabei seit: 20.10.2009

☆ Content Bringer

Beitrag hilfreich?

Hallo Thomas,

was hast du denn bisher versucht? Mit fallen sonst auch nur die üblichen Verdächtigen ein:
  • Sauberes Programmieren
  • Datenbankabfragen optimieren
  • Datenbank-Caching
  • Objekt-Caching
  • View based caching
  • Bytecode-Cache
  • magic-Methods vermeiden
  • include_path optimieren
  • absolute statt relative Pfade
  • autoloading statt require_once / include_once


Und bitte: Finger weg von Mikrooptimierungen icon_smile.gif





Verfasst am: 19. 05. 2011 [20:37]
Chance
182 Beiträge
Programmierer
Dabei seit: 13.11.2009

Aktiverer Schreiber

Beitrag hilfreich?

-Stricte Gleicheit etc. verwenden
-Strings bei mehrmaliger Verwendung zusammenfasse ( $test = 'bar'.$foo.'bar')
-Sparsamm mit Arrays umgehen

Verfasst am: 19. 05. 2011 [22:02]
Ultima
867 Beiträge
Fachinformatiker / Anwendungsentwicklung
Dabei seit: 09.07.2010

✓ Seitenreport Vorantreiber
Themenersteller

Beitrag hilfreich?

Versucht und nutzen tu ich vieles.
Mit dem Bytecode Cache meinst du APC oder?

Was ich euren Aufzählungen noch hinzufüge würde wäre:

  • Bit-Operation bevorzugen
  • Schnelles Filesystem (wenn möglich)
  • Effektive Datentypen
  • Speicherschonend Arbeiten
  • Sinnvolles einsetzten von Schleifen
  • Effektive Aufgabenverteilung (Im Vergleich zu PHP sind Datenbank dafür gemacht Datensätze zu verwalten / sortieren / filtern)

Richtig gut fand ich das Kompilieren von Klassen. Im Vergleich zu einfachen include Anweisungen sind sie bis zu ~44% schneller. Nur Unterstützt das kein Hosting Paket da braucht man schon einen eigenen Server mit vollem Root zugriff.


Und wie gesagt, ich suche nach wie vor nach weiteren effektiven Möglichkeiten.

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 19.05.2011 um 22:02.]

Mein Portal: Ultima-Project.net


Verfasst am: 19. 05. 2011 [22:45]
UFOMelkor
353 Beiträge
Student
Dabei seit: 20.10.2009

☆ Content Bringer

Beitrag hilfreich?

"Ultima" schrieb:
Mit dem Bytecode Cache meinst du APC oder?

Ja es gibt neben dem APC noch ein paar andere wie den eAccelerator, ein großer Unterschied ist das nicht (der APC bringt allerdings auch einen user-Cache mit).

Was ich euren Aufzählungen noch hinzufüge würde wäre:

"Ultima" schrieb:
Bit-Operation bevorzugen

Von Bit-Operatoren würde ich i.d.R. abraten. Das ist eine Mikro-Ooptimierung, deren Effekt sich zumeist in nicht merkbaren Bereichen abspielt, während der Code gleichzeitig schwieriger zu lesen und damit schwieriger zu warten wird.

"Ultima" schrieb:
Effektive Datentypen

Was sind für dich effektive Datentypen und wo liegt ihr Vorteil?

"Ultima" schrieb:
Richtig gut fand ich das Kompilieren von Klassen. Im Vergleich zu einfachen include Anweisungen sind sie bis zu ~44% schneller. Nur Unterstützt das kein Hosting Paket da braucht man schon einen eigenen Server mit vollem Root zugriff.

Kompilierte Klassen in PHP? Hast du da einen Link? icon_smile.gif





Verfasst am: 19. 05. 2011 [23:02]
Ultima
867 Beiträge
Fachinformatiker / Anwendungsentwicklung
Dabei seit: 09.07.2010

✓ Seitenreport Vorantreiber
Themenersteller

Beitrag hilfreich?

"UFOMelkor" schrieb:
Von Bit-Operatoren würde ich i.d.R. abraten. Das ist eine Mikro-Ooptimierung, deren Effekt sich zumeist in nicht merkbaren Bereichen abspielt, während der Code gleichzeitig schwieriger zu lesen und damit schwieriger zu warten wird.

Mal ein Beispiel, hier ein Prüfung auf gerade oder ungerade Zahl.
PHP
for ($n=0;$n<120;$n+=1) {
  if($n%2==0) echo 'gearde';
  else echo 'ungearde';
}

Nun mit Bit Operatoren:
PHP
for ($n=0;$n<120;$n++) {
  if($n&1) echo 'ungearde';
  else echo 'gearde';
}

Der Rechenaufwand beim ersten Beispiel ist im Vergleich zum 2. wesentlich höher und bei entsprechenden Einsatz auch spürbar. Und das mit der Lesbarkeit ist schon richtig aber irgendwo auch eine Sache der Gewohnheit.

"UFOMelkor" schrieb:
Was sind für dich effektive Datentypen und wo liegt ihr Vorteil?

PHP erkennt die Datentypen weitgehend automatisch, ich sehe es aber oft das Zahlen als Zeichenketten angelegt werden. Und vor jeder Rechenoperation ein Typecast ist schon überflüssig. Effektiv war vielleicht etwas falsch Formuliert.

"UFOMelkor" schrieb:
Kompilierte Klassen in PHP? Hast du da einen Link? icon_smile.gif

Klar icon_smile.gif
http://de3.php.net/manual/de/book.bcompiler.php

Mein Portal: Ultima-Project.net


Verfasst am: 20. 05. 2011 [01:12]
masa8
1087 Beiträge
Selbständig
Dabei seit: 22.10.2009

✭✭ Aktiver Seitenreport Vorantreiber

Beitrag hilfreich?

Da PHP ja recht häufig im Verbindung mit MySQL verwendet wird, will ich hier mal auf die Möglichkeiten hinweisen, das sich einige Berechnungen direkt mit MySQL im Query durchführen lassen.

Man muss sich nicht erst die DB-Werte holen, um sie mit PHP weiter zu verarbeiten, es geht auch direkt in der Abfrage an die Datenbank.

Da steckt enormes Performance-Potential drin, und es ist nicht besonders schwer, mit MySQL-Funktionen und Left/Right-Joins, einiges an Code und Prozessorlast einzusparen.

Mehr dazu gibt es hier:
http://dev.mysql.com/doc/refman/5.1/de/functions.html

Gruß Matthias

Mein Blog über Wordpress, SEO, interne Verlinkung und mehr
alles-mit-links
BLACKINK Webkatalog 20-25 Backlinks "Lifetime"


Verfasst am: 20. 05. 2011 [12:36]
romacron
1276 Beiträge
JDev Xer
Dabei seit: 01.11.2009

✭✭ Aktiver Seitenreport Vorantreiber

Beitrag hilfreich?

Das sieht ja hier schon richtig gut aus.

Matthias, ich stimme dir völlig zu. Die Datenbanken müssen ordentliche Querys abgefragt werden.
Wer mit Joins nicht so gut klar kommt kann bereits mit einer bestimmten Abfrage von DB Spalten enorm punkten. So mancher speichert ne 1:1 kopie des Tables in einem object.

Statt
SELECT * FROM bigtable
besser
SELECT a.id, a.title
...diese Bauart mit Joins und alles ist gut.
Mit so Kleinigkeiten holt man eine Menge Performance aus dem System, ohne sich endlos zu verbasteln(kosteneffizient).

Hin und wieder sollte man den Profiler über den Code laden. Schnell sind "ich dreh mich doof und 3 mal im Kreis"- Funktionen ermittelt.

gelegentlich "static" verwenden hilft.

..ich denke so laufen die Php-Anwendungen rund.

die grössten Zeitfresser sind die Responses, die machen ca. die Hälfte eines Zyklus aus!!

Verfasst am: 20. 05. 2011 [12:45]
Ultima
867 Beiträge
Fachinformatiker / Anwendungsentwicklung
Dabei seit: 09.07.2010

✓ Seitenreport Vorantreiber
Themenersteller

Beitrag hilfreich?

Danke für eure Hinweise, aber es geht mir nur um PHP.

Statische Klassen/Variablen verstopfen den Speicher da sie grundsätzlich geladen werden und überall sichtbar sind. Von daher sollte man den Einsatz nach Möglichkeit vermeiden.

Mein Portal: Ultima-Project.net


Verfasst am: 20. 05. 2011 [13:20]
UFOMelkor
353 Beiträge
Student
Dabei seit: 20.10.2009

☆ Content Bringer

Beitrag hilfreich?

"Ultima" schrieb:
PHP
for ($n=0;$n<120;$n+=1) {
  if($n%2==0) echo 'gearde';
  else echo 'ungearde';
}

Nun mit Bit Operatoren:
PHP
for ($n=0;$n<120;$n++) {
  if($n&1) echo 'ungearde';
  else echo 'gerade';
}

Gegen das $n++ hätte ich nichts, das stört meinen Lesefluss nicht. Wenn mir aber jemand ein $n&1 vorlegen würde ...
Die Sache ist die: Solange man nicht gerade 5 Millionen solcher Operationen hat, wirkt es sich nicht merkbar aus.


Hab das jetzt nur kurz überflogen, aber macht die Erweiterung nicht im Grunde das gleiche wie APC & co?

"romacron" schrieb:
gelegentlich "static" verwenden hilft.

"Ultima" schrieb:
Statische Klassen/Variablen verstopfen den Speicher da sie grundsätzlich geladen werden und überall sichtbar sind. Von daher sollte man den Einsatz nach Möglichkeit vermeiden.

AFAIK sind statische Methoden sind tatsächlich ungefähr 4 mal so schnell wie nicht statische Methoden (auf verschiedenen Seiten gelesen, nicht überprüft).
Allerdings untergraben sie die OOP:
"Robert C. Martin, Clean Code" schrieb:
Im Allgemeinen sollten Sie nicht-statische Methoden den statischen vorziehen. Im Zweifelsfall sollten Sie eine Funktion als nicht-statisch deklarieren. Wenn eine Funktion wirklich statisch sein soll, sollten Sie dafür sorgen, dass sie sich bei keiner Gelegenheit polymorph verhalten soll.


"romacron" schrieb:

Hin und wieder sollte man den Profiler über den Code laden. Schnell sind "ich dreh mich doof und 3 mal im Kreis"- Funktionen ermittelt.

Das möchte ich nochmal hervorheben. Die xdebug extension eignet sich hier sehr gut.

Ansonsten fehlt noch das optimieren von Bedingungen:
PHP
if (slowCondition() || fastCondition()) {
    //vermeiden
}
 
if (fastCondition() || slowCondition()) {
    //bevorzugen
}







to Top to Top

Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.

RSS Feed abonnieren

Werde in Echtzeit über neue Foren-Beiträge informiert:

RSS Feed abonnieren


1 Mitglied war innerhalb der letzten 15 Minuten online (41 heute gesamt):
berlindream

Administratoren und Moderatoren:
[keine]

Seitenreport hat 46147 registrierte Mitglieder, 4296 Themen und 37483 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 6 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 0 neue Themen und 1 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Mehrfach empfohlen

Seitenreport ist einer der bekanntesten SEO und Website Analyse Dienste im deutschsprachigen Raum und wurde u.a. schon empfohlen:
von Mr. Wong im Wong Letter
vom Leserservice der Deutschen Post
vom Technik Blog SiN
und vielen anderen

Seitenreport API

Verfolge die SERP Positionen Deiner Keywords und erhalte Informationen über verwendete Mikroformate, frage die Ergebnisse unserer Analysen live ab oder greife auf unsere History-Datenbank zu. Dies alles bietet Dir die neue Seitenreport API. Kontaktiere uns, um weitere Infos zu erhalten.