|
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
==================
[Back to original message]
|