Mailinglisten-Archive |
Hallo allerseits,
ich habe da ein Performanceproblem!
Für eine recht komplexe Shop-Lösung benötige ich zur Bestimmung des
Preises eine Reihe von DB-Abfragen. Sind ein bis zwei Artikel in
meinem Warenkorb, so ist die Performance ok. Sobald aber die Anzahl
der Artikel nach oben geht (sagen wir: 5), benötigt PHP holen und
berechnen der Preise sage und schreibe drei Sekunden. Wie schon
gesagt, es werden mehrere DB-Abfragen pro Artikel getätigt.
An der DB_Struktur kann ich nichts ändern, die ist fest vorgegeben.
Was mir allerdings auffiehl ist die Tatsache, daß in der Zeit, wo die
Daten berechnet/geholt werden, der postmaster-Prozeß nur 4% CPU Zeit
verbrauchte, der httpd (und damit php) aber knapp 95%. Kann es sein,
daß dies gar kein DB-Problem ist, sondern einfach nur eine Ineffizienz
im PHP?
Ich arbeite ziemlich viel mit Klassen. Z.B. hat die Warenkorbklasse
ein Array von Itemklassen. Diese Items werden dann in die Berechnungen
gesteckt und, da man nicht über $Basket->Items[1]->ProductId auf die
einzelnen Items zugreifen kann. Ist die Berechnung für ein item
erfolgt, so wird es in das Array zurückkopiert - reichlich
Ineffizient.
Gibt es eine Möglichkeit, sich eine Referenz auf ein Objekt zu holen?
Wenn ich ein $Item = $Basket->Items[1]; schreibe, wird ja immer die
ganze Klasse kopiert. Ein $Item = &$Basket->Items[1]; (in Anlehnung an
Referenzen in Funktionen) wäre wesentlich effizienter.
Vielen Dank
Florian Baumert
\\|||//
| |
(.) (.)
===================oOO==(_)==OOo=========================
! Florian Baumert !
? Feldbergstr 44 ?
! D-61140 Oberursel ?
! Tel.: 0172 59 35 0 55 !
? ===================================================== ?
! baumert_(at)_plt.de www.plt.de !
=========================================================
php::bar PHP Wiki - Listenarchive