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

PHP Performance steigern

Verfasst am: 19. 05. 2011 [18:49]
Ultima
Dabei seit: 09.07.2010
Themenersteller

759 Beiträge
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



 
Verfasst am: 19. 05. 2011 [20:26]
UFOMelkor
Dabei seit: 20.10.2009

348 Beiträge
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
Dabei seit: 13.11.2009

140 Beiträge
Beitrag hilfreich?

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

www.piacos.de
www.psi-portal.de
 
Verfasst am: 19. 05. 2011 [22:02]
Ultima
Dabei seit: 09.07.2010
Themenersteller

759 Beiträge
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.]

 
Verfasst am: 19. 05. 2011 [22:45]
UFOMelkor
Dabei seit: 20.10.2009

348 Beiträge
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
Dabei seit: 09.07.2010
Themenersteller

759 Beiträge
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

 
Verfasst am: 20. 05. 2011 [01:12]
masa8
Dabei seit: 22.10.2009

946 Beiträge
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 - "Liftime" Eintrag 259,- € zzgl. MwSt.
 
Verfasst am: 20. 05. 2011 [12:36]
romacron
Dabei seit: 01.11.2009

1143 Beiträge
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
Dabei seit: 09.07.2010
Themenersteller

759 Beiträge
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.

 
Verfasst am: 20. 05. 2011 [13:20]
UFOMelkor
Dabei seit: 20.10.2009

348 Beiträge
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
}


 




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:



9 Mitglieder waren innerhalb der letzten 15 Minuten online (57 heute gesamt):
alphamerisch, Boxerworld, ElkeTrautmann, Monchi, presse, romacron, San, timeless_81

Administratoren und Moderatoren:
seitenreport

Seitenreport hat 18153 registrierte Mitglieder, 3003 Themen und 29112 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 12 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 1 neues Thema und 7 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

Partnerprogramm

12% Lifetime Provision auf alle Buchungen von Dir geworbener Mitglieder sowie 0,50 € für jede Registrierung. Eines der besten deutschen Partnerprogramme laut den appCharts von 100partnerprogramme.de. Nimm jetzt teil am Seitenreport Partnerprogramm und verdiene gutes Geld dabei!

* = Partnerlinks