You are here: Re: Performance question - passing data between objects (PHP4-styleOOP) « All PHP « IT news, forums, messages
Re: Performance question - passing data between objects (PHP4-styleOOP)

Posted by Jerry Stuckle on 11/10/06 04:26

Markus Ernst wrote:
> Jerry Stuckle schrieb:
>
>> Markus Ernst wrote:
>>
>>> Hello
>>>
>>> A class that composes the output of shop-related data gets some info
>>> from the main shop class. Now I wonder whether it is faster to store
>>> the info in the output class or get it from the main class whenever
>>> it is needed:
>>>
>>> class shop_main {
>>> var $prices = null;
>>> function &get_prices() {
>>> if (is_null($this->prices)) {
>>> $this->prices =& $this->db->getCol('SELECT id FROM shop_prices');
>>> if (!is_array($this->prices)) $this->prices = array();
>>> }
>>> return $this->prices;
>>> }
>>> }
>>>
>>> // case 1: store info in class
>>> class shop_output {
>>> var $prices = null;
>>> var $main_shop_obj;
>>> function do_something($product_id) {
>>> if (is_null($this->prices)) {
>>> // assume that main shop object is already set
>>> $this->prices =& $this->main_shop_obj->get_prices();
>>> }
>>> foreach ($this->prices as $price_id) {
>>> // do something...
>>> }
>>> }
>>> }
>>>
>>> // case 2: get info each time it is needed
>>> class shop_output {
>>> var $main_shop_obj;
>>> function do_something($product_id) {
>>> // assume that main shop object is already set
>>> foreach ($this->main_shop_obj->get_prices() as $price_id) {
>>> // do something...
>>> }
>>> }
>>> }
>>>
>>> BTW I also wonder whether it is appropriate to pass the prices by
>>> reference here - I assume it is, but in an older thread on
>>> performance Chung Leung stated that passing by reference can decrease
>>> performance in some cases.
>>>
>>> Thanks for a comment!
>>> Markus
>>
>>
>> Impossible to tell from your comments. There are way too many variables.
>>
>> For instance - if your main shop class has 10 values and you need each
>> of them 50 times, and those values don't change, it's probably more
>> efficient to cache them in the output class.
>>
>> OTOH, if you have 1M items in the main class which change frequently
>> and you only need 2 items from it, it's more efficient to get them
>> from the main class each time.
>
>
> Thank you, this helps a lot as a guideline.
>
>> And Chung is correct. Many times passing by reference is faster, but
>> occasionally it's slower. However, that should not be a reason you
>> decide to pass by reference or not. Or if it is, it should be about
>> number 247 on your list.
>>
>> The real question is - are you actually having performance problems,
>> or are you spinning your wheels on something which may or may not be a
>> problem? I suspect the latter.
>
>
> Your suspection is correct. After I _had_ performance problems (30+
> seconds execution time for displaying 20 or 30 items...) I started
> caring for performance issues at all, and now I try to be aware of them
> even before problems occur. With my poor technical background (I don't
> have a basic IT education) this sometimes makes me spend too much effort
> on questions of low priority. Thus, comments of the kind you posted are
> very helpful for me, thanks!

I understand. I've been programming since the late 60's, and have seen
my share of performance problems (think of what it was like to be on a
mainframe with 4,000 bytes - not 4K - of core memory, running at
something quite a bit less than 1Mhz clock rate).

And yes, you should always keep potential performance problems in mind
when programming. But I really don't worry about them until I get the
first cut at the program running and see if I have performance problems.

As an example - I wrote a fairly small C++ program with a lot of
recursive calculations (the theoretical max was 81! (81 factorial - 81 x
80 x 79 ... x 3 x 2 x 1) operations. The goal was to have it finish the
ops in something less than a couple of minutes on a 900Mhz laptop.

I went ahead and wrote it, not paying much attention to performance.
Results when I was done was every run was < 1 second. Mission accomplished.

Another case I had to parse out a rather large (5MB) html file in PHP.
The goal was to convert some huge tables to csv files for importing to a
spreadsheet. The first run took over 15 minutes. So at that time I
went back and optimized the code. Final results were around 20 seconds.

The bottom line was - I didn't waste any time on the first one because
it was already fast enough. The second one took me around 10% more time
to tweak and get the speed down. But that was much easier because I
already had the program working, and my design allowed me to easily
modify the code to close up the bottlenecks.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация