Re: Re: optimilize web page loading

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Eric Butera wrote:
On Thu, Mar 27, 2008 at 12:41 PM, Peter Ford <pete@xxxxxxxxxxxxx> wrote:
Jason Pruim wrote:
 >
 > On Mar 27, 2008, at 11:05 AM, Shawn McKenzie wrote:
 >> Al wrote:
 >>> Good point.  I usually do use the single quotes, just happened to key
 >>> doubles for the email.
 >>>
 >>> Actually, it's good idea for all variable assignments.
 >>>
 >>> Philip Thompson wrote:
 >>>> On Mar 26, 2008, at 6:28 PM, Al wrote:
 >>>>> Depends on the server and it's load.  I've strung together some
 >>>>> rather large html strings and they aways take far less time than the
 >>>>> transient time on the internet. I used to use OB extensively until
 >>>>> one day I took the time to measure the difference. I don't recall the
 >>>>> numbers; but, I do recall it was not worth the slight extra trouble
 >>>>> to use OB.
 >>>>>
 >>>>> Now, I simple assemble by html strings with $report .= "foo"; And
 >>>>> then echo $report at the end. It also makes the code very easy to
 >>>>> read and follow.
 >>>>
 >>>> You might as well take it a step further. Change the above to:
 >>>>
 >>>> $report .= 'foo';
 >>>>
 >>>> This way for literal strings, the PHP parser doesn't have to evaluate
 >>>> this string to determine if anything needs to be translated (e.g.,
 >>>> $report .= "I like to $foo"). A minimal speedup, but nonetheless...
 >>>>
 >>>> ~Philip
 >>>>
 >>>>
 >>>>> Andrew Ballard wrote:
 >>>>>> On Wed, Mar 26, 2008 at 1:18 PM, Al <news@xxxxxxxxxxxxx> wrote:
 >>>>>>> You are really asking an HTML question, if you think about it.
 >>>>>>>
 >>>>>>> At the PHP level, either use output buffering or assemble all your
 >>>>>>> html string as a variable and
 >>>>>>> then echo it.  The goal is to compress the string into the minimum
 >>>>>>> number of packets.
 >>>>>> Yes, but do so smartly. Excessive string concatenation can slow
 >>>>>> things
 >>>>>> down as well. On most pages you probably won't notice much
 >>>>>> difference,
 >>>>>> but I have seen instances where the difference was painfully obvious.
 >>>>>> Andrew
 >>
 >> Yes and if your script takes .00000000000000000000000000000002 seconds
 >> to run using double quotes it will only take
 >> .000000000000000000000000000000019 seconds with single (depending upon
 >> how many quotes you have of course)  :-)
 >
 > I'm coming in late to this thread so sorry if I missed this :)
 >
 > How much of a difference would it make if you have something like this:
 > echo "$foo bar bar bar bar $foo $foo"; verses: echo $foo . "bar bar bar
 > bar" . $foo $foo; ?In other words... You have a large application which
 > is most likely to be faster? :)
 >
 >

 There was a discussion about this a few weeks ago - ISTR that the compiler does
 wierd things with double-quoted strings, something like tokenising the words and
 checking each bit for lurking variables.
 So in fact


   echo "$foo bar bar bar bar $foo $foo";

 is slowest (because there *are* variables to interpolate,


   echo $foo . " bar bar bar bar ".$foo." ".$foo;

 is a bit faster, but the double-quoted bits cause some slow-down,


   echo $foo . ' bar bar bar bar '.$foo.' '.$foo;

 is a bit faster again - the single quoted bits pass through without further
 inspection, and finally


   echo $foo,' bar bar bar bar ',$foo,' ',$foo;

 is actually the fastest, because the strings are not concatenated before output.

 I think that was the overall summary - I can't locate the original post to
 verify (or attribute) but it's in this list somewhere...

 Cheers

 --
 Peter Ford                              phone: 01580 893333
 Developer                               fax:   01580 893399
 Justcroft International Ltd., Staplehurst, Kent



 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php



Can you prove these statements with real benchmarks that are current?
Ilia said that it is a myth that there is a performance difference
between " and ' in one of his talks.

I found one recent post on the subject in gmane:
http://article.gmane.org/gmane.comp.php.general/169028




The poster's results are as I remembered, except that was building a string, not echoing: possibly not quite the same.

So I tried it myself, adapting to using echo (to the ob to avaoid printing forty million * "foo bar bar ..."). For an extra wheeze, I also tried <?=$foo?> syntax embedded in HTML to see if that is as bad as people make out. I didn't try HEREDOC syntax, because it is difficult to reproduce exactly the same output - newlines get added to the output. To get thing to run I needed to increase time out, and reduce the string to avoid filling the PHP memory limit I have set at the moment. Here is the code:

<?php
ini_set('max_execution_time',300);
$foo = 'f';
ob_start();
$time[1] = microtime(TRUE);
for($x = 0; $x < 10000000; $x++){
    echo "$foo b b b b $foo $foo";
}
$time[2] = microtime(TRUE);
ob_end_clean();
ob_start();
$time[3] = microtime(TRUE);
for($x = 0; $x < 10000000; $x++){
    echo $foo . ' b b b b '.$foo.' '.$foo;
}
$time[4] = microtime(TRUE);
ob_end_clean();
ob_start();
$time[5] = microtime(TRUE);
for($x = 0; $x < 10000000; $x++){
    echo $foo . " b b b b ".$foo." ".$foo;
}
$time[6] = microtime(TRUE);
ob_end_clean();
ob_start();
$time[7] = microtime(TRUE);
for($x = 0; $x < 10000000; $x++){
    echo $foo,' b b b b ',$foo,' ',$foo;
}
$time[8] = microtime(TRUE);
ob_end_clean();
ob_start();
$time[9] = microtime(TRUE);
for($x = 0; $x < 10000000; $x++){
?><?=$foo?> b b b b <?=$foo?> <?=$foo?><?php
}
$time[10] = microtime(TRUE);
ob_end_clean();
echo 'For 10,000,000 loops:';
echo '<br />Interpolation:',($time[2]-$time[1]);
echo '<br />Concatenation single quote:',($time[6]-$time[5]);
echo '<br />Concatenation double quote:',($time[4]-$time[3]);
echo '<br />List:',($time[8]-$time[7]);
?>

The results are slightly different to what I expected:

For 10,000,000 loops:

Interpolation:13.385520935059

Concatenation single quote:14.523960828781

Concatenation double quote:14.472594976425

List:11.083581924438

Embedded in HTML:16.329668045044

So, it looks like for echoing at least then single quotes are actually marginally slower than double quotes, and interpolation is faster.
Embedding in HTML *is* slower, and the comma-separated list syntax is fastest.

I suspect YMMV...


--
Peter Ford                              phone: 01580 893333
Developer                               fax:   01580 893399
Justcroft International Ltd., Staplehurst, Kent

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux