Mailinglisten-Archive |
Florian Baumert wrote:
>
> Ich habe das Problem jetzt lokalisiert, es ist ein echtes PHP
> Performanceproblem. Ich habe ein paar Klassen mit ca. 20 Datamembers.
> Diese spiegeln mir einzelne Suchabfragen wieder. Nun gibt es eine
> Klasse Basket, die hat ein Array von BasketItems (auch Klassen).
>
> Will ich diese updaten, ist der erste (naive) Ansatz
>
> for ($Index = 0; $Index < sizeof($this->Items); ++$Index)
> {
> $this->Items[$Index]->Quantity += $Quantity;
> }
>
> Geht aber net!!!
>
> Also, zweiter Ansatz:
>
> for ($Index = 0; $Index < sizeof($this->Items); ++$Index)
> {
> $Tmp = $this->Items[$Index];
> $Tmp->Quantity += $Quantity;
> $this->Items[$Index] = $Tmp;
> }
>
> Wenn Items Klassen mit ca. 20 Datamembers beinhaltet, braucht PHP für
> ein 7 (SIEBEN!!!) Item grosses Array sage und schreibe 4 (VIER!!!)
> Sekunden. Auf einem 333er mit 256Mb.
>
> Naja, Lösung (wenn auch wirklich SUPER UNSAUBER!)
>
> function updateItem(&$Items, $Quantity)
> {
> for ($Index = 0; $Index < sizeof($Items); ++$Index)
> {
> $Items[$Index]->Quantity += $Quantity;
> }
> }
>
> updateItems($this->Items);
>
> Dann dauert das ganze nur 0.7 Sekunden!!
>
> Ändert sich das Dilemma in 4.0?
Wahrscheinlich nicht, denn das Ganze OO-Geraffel muß auch noch
kompiliert werden. Je mehr Datamembers (wenn Du damit die Anzahl $Items
meinst) desto schneller. Aber warum probierst Du das nicht mal selber
aus. Oder kannst Du mal zu Testzwecken die normale Programmierweise
benutzen und die Zeiten stoppen.
-Egon
php::bar PHP Wiki - Listenarchive