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