Connecting Tech Pros Worldwide Help | Site Map

Is foreach the fastest way to do this?

david
Guest
 
Posts: n/a
#1: Aug 6 '06
I need 5 queries from the database, which I display in a php foreach
loop the following way.

$query1 = $DB->query("SELECT ... DESC LIMIT 20");
$query2 = $DB->query("SELECT ... DESC LIMIT 20");
$query3 = $DB->query("SELECT ... DESC LIMIT 30");
$query4 = $DB->query("SELECT ... DESC LIMIT 9");
$query5 = $DB->query("SELECT ... DESC LIMIT 9");

foreach ($query1->result as $row) {
echo '<a href="httplink/'.$row['topic_id'].'/"
title="'.htmlspecialchars(trim($row['screen_name'])).':
'.htmlspecialchars(trim($row['title'])).'">&raquo;
'.substr($row['title'], 0, 20)." ...</a><br />
";}
foreach ($query2->result as $row) {
echo '<a href="httplink/'.$row['topic_id'].'/"
title="'.htmlspecialchars(trim($row['screen_name'])).':
'.htmlspecialchars(trim($row['title'])).'">&raquo;
'.substr($row['title'], 0, 20)." ...</a><br />
";}

and so on....

Looking only at performance is there a quicker way to do this? Could I
use a different loop (other than foreach) to get better performance?

I found the following page, but I am not sure which one would help me
and how to change the code around to make it work. Any ideas would
help. Thank you!
http://www.php.lt/benchmark/phpbench.php

david

s a n j a y
Guest
 
Posts: n/a
#2: Aug 6 '06

re: Is foreach the fastest way to do this?


david wrote:
Quote:
I need 5 queries from the database, which I display in a php foreach
loop the following way.
>
$query1 = $DB->query("SELECT ... DESC LIMIT 20");
$query2 = $DB->query("SELECT ... DESC LIMIT 20");
$query3 = $DB->query("SELECT ... DESC LIMIT 30");
$query4 = $DB->query("SELECT ... DESC LIMIT 9");
$query5 = $DB->query("SELECT ... DESC LIMIT 9");
>
foreach ($query1->result as $row) {
echo '<a href="httplink/'.$row['topic_id'].'/"
title="'.htmlspecialchars(trim($row['screen_name'])).':
'.htmlspecialchars(trim($row['title'])).'">&raquo;
'.substr($row['title'], 0, 20)." ...</a><br />
";}
foreach ($query2->result as $row) {
echo '<a href="httplink/'.$row['topic_id'].'/"
title="'.htmlspecialchars(trim($row['screen_name'])).':
'.htmlspecialchars(trim($row['title'])).'">&raquo;
'.substr($row['title'], 0, 20)." ...</a><br />
";}
>
and so on....
>
Looking only at performance is there a quicker way to do this? Could I
use a different loop (other than foreach) to get better performance?
>
I found the following page, but I am not sure which one would help me
and how to change the code around to make it work. Any ideas would help.
Thank you!
http://www.php.lt/benchmark/phpbench.php
>
david
>
Why do you want to split hairs? How does 8 ms different than 12 ms in
practical sense?
david
Guest
 
Posts: n/a
#3: Aug 8 '06

re: Is foreach the fastest way to do this?


On 2006-08-06 09:46:02 -0700, s a n j a y <sanjay.debian@gmail.comsaid:
Quote:
david wrote:
Quote:
>I need 5 queries from the database, which I display in a php foreach
>loop the following way.
>>
>$query1 = $DB->query("SELECT ... DESC LIMIT 20");
>$query2 = $DB->query("SELECT ... DESC LIMIT 20");
>$query3 = $DB->query("SELECT ... DESC LIMIT 30");
>$query4 = $DB->query("SELECT ... DESC LIMIT 9");
>$query5 = $DB->query("SELECT ... DESC LIMIT 9");
>>
>foreach ($query1->result as $row) {
> echo '<a href="httplink/'.$row['topic_id'].'/"
>title="'.htmlspecialchars(trim($row['screen_name'])).':
>'.htmlspecialchars(trim($row['title'])).'">&raquo;
>'.substr($row['title'], 0, 20)." ...</a><br />
>";}
>foreach ($query2->result as $row) {
> echo '<a href="httplink/'.$row['topic_id'].'/"
>title="'.htmlspecialchars(trim($row['screen_name'])).':
>'.htmlspecialchars(trim($row['title'])).'">&raquo;
>'.substr($row['title'], 0, 20)." ...</a><br />
>";}
>>
>and so on....
>>
>Looking only at performance is there a quicker way to do this? Could I
>use a different loop (other than foreach) to get better performance?
>>
>I found the following page, but I am not sure which one would help me
>and how to change the code around to make it work. Any ideas would
>help. Thank you!
>http://www.php.lt/benchmark/phpbench.php
>>
>david
>>
>
Why do you want to split hairs? How does 8 ms different than 12 ms in
practical sense?
Well, when you have hundreds of requests coming in within a short
period of time, those ms add up. This is why I am trying to optimize
this function. Any ideas on how to make this the quickest?

Jerry Stuckle
Guest
 
Posts: n/a
#4: Aug 8 '06

re: Is foreach the fastest way to do this?


david wrote:
Quote:
On 2006-08-06 09:46:02 -0700, s a n j a y <sanjay.debian@gmail.comsaid:
>
Quote:
>david wrote:
>>
Quote:
>>I need 5 queries from the database, which I display in a php foreach
>>loop the following way.
>>>
>>$query1 = $DB->query("SELECT ... DESC LIMIT 20");
>>$query2 = $DB->query("SELECT ... DESC LIMIT 20");
>>$query3 = $DB->query("SELECT ... DESC LIMIT 30");
>>$query4 = $DB->query("SELECT ... DESC LIMIT 9");
>>$query5 = $DB->query("SELECT ... DESC LIMIT 9");
>>>
>>foreach ($query1->result as $row) {
>> echo '<a href="httplink/'.$row['topic_id'].'/"
>>title="'.htmlspecialchars(trim($row['screen_name'])).':
>>'.htmlspecialchars(trim($row['title'])).'">&raquo;
>>'.substr($row['title'], 0, 20)." ...</a><br />
>>";}
>>foreach ($query2->result as $row) {
>> echo '<a href="httplink/'.$row['topic_id'].'/"
>>title="'.htmlspecialchars(trim($row['screen_name'])).':
>>'.htmlspecialchars(trim($row['title'])).'">&raquo;
>>'.substr($row['title'], 0, 20)." ...</a><br />
>>";}
>>>
>>and so on....
>>>
>>Looking only at performance is there a quicker way to do this? Could
>>I use a different loop (other than foreach) to get better performance?
>>>
>>I found the following page, but I am not sure which one would help me
>>and how to change the code around to make it work. Any ideas would
>>help. Thank you!
>>http://www.php.lt/benchmark/phpbench.php
>>>
>>david
>>>
>>
>Why do you want to split hairs? How does 8 ms different than 12 ms in
>practical sense?
>
>
Well, when you have hundreds of requests coming in within a short period
of time, those ms add up. This is why I am trying to optimize this
function. Any ideas on how to make this the quickest?
David,

What do you mean by a "short period"? 1 second? 10 seconds?

Even 100 page requests in 10 seconds would be over 860K requests/day,
which would make your site one of the busiest on the internet. And if
that's the case you'll have a lot more things to worry about -
bandwidth, for instance.

Even at 100 page requests/min. you'll be one of the busiest on the
internet - but the 8ms won't be noticeable.

I understand your desire to optimize the code. But some things just
aren't worth the effort.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Carl Vondrick
Guest
 
Posts: n/a
#5: Aug 8 '06

re: Is foreach the fastest way to do this?


Quote:
I understand your desire to optimize the code. But some things just
aren't worth the effort.
Agreed. Remember, when you optimize you should mostly look at the
complexity. Is it in polynomial or exponential time? If it's
exponential, then you have reason to worry.

For example, which of the following method is the worse? Best?

public function foo($m,$n)
{
for ($x = 0; $x < $m; $x++)
{
echo $x;
}
for ($y = 0; $y < $n; $y++)
{
echo $y;
}
}

public function foo($m,$n)
{
for ($x = 0; $x < $m; $x++)
{
for ($y = 0; $y < $n; $y++)
{
echo $y + $x;
}
}
}

The first one is better; the complexity of the first is O(n+m) vs O(n*m).
Colin McKinnon
Guest
 
Posts: n/a
#6: Aug 8 '06

re: Is foreach the fastest way to do this?


Jerry Stuckle wrote:
Quote:
david wrote:
Quote:
>On 2006-08-06 09:46:02 -0700, s a n j a y <sanjay.debian@gmail.comsaid:
>>
Quote:
>>david wrote:
>>>
>>>I need 5 queries from the database, which I display in a php foreach
>>>loop the following way.
>>>>
>>>$query1 = $DB->query("SELECT ... DESC LIMIT 20");
>>>$query2 = $DB->query("SELECT ... DESC LIMIT 20");
>>>$query3 = $DB->query("SELECT ... DESC LIMIT 30");
>>>$query4 = $DB->query("SELECT ... DESC LIMIT 9");
>>>$query5 = $DB->query("SELECT ... DESC LIMIT 9");
>>>>
>>Why do you want to split hairs? How does 8 ms different than 12 ms in
>>practical sense?
>>
>>
>Well, when you have hundreds of requests coming in within a short period
>of time, those ms add up. This is why I am trying to optimize this
>function. Any ideas on how to make this the quickest?
>
David,
>
What do you mean by a "short period"? 1 second? 10 seconds?
>
Even 100 page requests in 10 seconds would be over 860K requests/day,
which would make your site one of the busiest on the internet. And if
that's the case you'll have a lot more things to worry about -
bandwidth, for instance.
>
No need to *&(% all over his post - how do you know he's NOT doing that
volume?

Faster is not the same thing as more scalable though - its kind of tortoise
and hare thing.

....but if I had to fix the code I'd be looking to do a single query (UNION?)
rather than worrying about which loop construct to use.

C.
Chung Leong
Guest
 
Posts: n/a
#7: Aug 8 '06

re: Is foreach the fastest way to do this?


Jerry Stuckle wrote:
Quote:
Even 100 page requests in 10 seconds would be over 860K requests/day,
which would make your site one of the busiest on the internet. And if
that's the case you'll have a lot more things to worry about -
bandwidth, for instance.
>
Even at 100 page requests/min. you'll be one of the busiest on the
internet - but the 8ms won't be noticeable.
>
I understand your desire to optimize the code. But some things just
aren't worth the effort.
Right. Nearly all web applications are bound by throughput. Even at
maximum server load CPU utilization won't be near 100%. It's pointless
save a ms here and there when it just end up being idle time.

Jerry Stuckle
Guest
 
Posts: n/a
#8: Aug 9 '06

re: Is foreach the fastest way to do this?


Colin McKinnon wrote:
Quote:
Jerry Stuckle wrote:
>
>
Quote:
>>david wrote:
>>
Quote:
>>>On 2006-08-06 09:46:02 -0700, s a n j a y <sanjay.debian@gmail.comsaid:
>>>
>>>
>>>>david wrote:
>>>>
>>>>
>>>>>I need 5 queries from the database, which I display in a php foreach
>>>>>loop the following way.
>>>>>
>>>>>$query1 = $DB->query("SELECT ... DESC LIMIT 20");
>>>>>$query2 = $DB->query("SELECT ... DESC LIMIT 20");
>>>>>$query3 = $DB->query("SELECT ... DESC LIMIT 30");
>>>>>$query4 = $DB->query("SELECT ... DESC LIMIT 9");
>>>>>$query5 = $DB->query("SELECT ... DESC LIMIT 9");
>>>>>
>>>>
>>>>Why do you want to split hairs? How does 8 ms different than 12 ms in
>>>>practical sense?
>>>
>>>
>>>Well, when you have hundreds of requests coming in within a short period
>>>of time, those ms add up. This is why I am trying to optimize this
>>>function. Any ideas on how to make this the quickest?
>>
>>David,
>>
>>What do you mean by a "short period"? 1 second? 10 seconds?
>>
>>Even 100 page requests in 10 seconds would be over 860K requests/day,
>>which would make your site one of the busiest on the internet. And if
>>that's the case you'll have a lot more things to worry about -
>>bandwidth, for instance.
>>
>
>
No need to *&(% all over his post - how do you know he's NOT doing that
volume?
>
Faster is not the same thing as more scalable though - its kind of tortoise
and hare thing.
>
...but if I had to fix the code I'd be looking to do a single query (UNION?)
rather than worrying about which loop construct to use.
>
C.
First of all, I didn't "*&(% all over his post" - I pointed out that
he's probably wasting his time trying to save a very little bit of time.

And if he's doing over 800K page views a day (for this one page), he
would have one of the busiest sites on the internet probably on the
order of 20-50M hits a day minimum. He wouldn't be running PHP on a
single server, and probably would not be using MySQL. Rather he would
be running multiple servers with a heavy-duty database such as SQL
Server, Oracle or DB2.

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