PDA

View Full Version : [HOW TO] Speeding up PHP



admans
07-17-2005, 07:07 AM
[HOW TO] Speeding up PHP

I've seen far too many articles with "gimmicks" for speeding up your run-time for PHP applications, and thought I'd chime in on what not to do, and what you should do.

echo "Don't"; print('bother');

The two most common gimmicks for decreasing run-time are the single vs double quote issue and the echo vs print issue. The idea here: don't even bother.

$string = 'Here is my value';
$string = "Here is my value";

Neither of these strings contain anything for PHP to parse/escape. Processing time is going to be virtually identical... we are talking maybe a fraction of a millisecond. No benchmarking application can properly "benchmark" the differences between the two and as such, the time savings will be negligent for any single page.

The second is echo vs print... use whatever happens to be comfortable. How many times do you use echo or print on a single page? For the sake of argument I ran a script that used print and echo 1000 times in one page... the result? Inconclusive... they both averaged to approximately 0.0008 seconds each. When's the last time you used echo OR print 1000 times in one page?

On to the real stuff.

do { Smart control structures } while { programming }

What takes the most processing time out of a script? Loooooooooooping. Control structures vary signifigantly on speed. As of PHP5 my test results produced the following control structures in order of fastest for looping:

for ()
foreach ()
while()
do {} while()

for() is the fastest for obvious reasons, the loop is doing a numerical operation, which, computers were designed for in the first place, no arrays, true/false, return values, just pure math.

foreach() is secondary for a less obvious reason. While it is slower then for(), since an actual iteration occurs, it's faster than while() because no return value is required.

do-while() is obviously going to be the slowest. It inherits the requirements of while() which is just above it in speed, and requires PHP interperet a second construct "do".

You're probably starting to wonder what the heck I'm talking about, since each of these control structures are used for different purposes. The idea here, is designing your code in a way that is most optimal for speed. If you are using a lot of loops in your program, try to stick with indexed arrays so you can use the considerably faster for().

A final note on control structures: switch is faster then if/else nests, without question. It's easy to understand why:



if ($variable == true)
{
// do something
} elseif ($variable == false)
// do something else
}



In this example, PHP has to read each statement seperately... so PHP will read:

$variable == true then $variable == false

Whereas a switch statement:



switch ($variable)
{
case 'true':
// do something
break;
case 'false':
// do something else
break;
}



Now PHP will read:

$variable == true OR false
Since PHP is only working with one variable, it doesn't have to parse the statement twice.

Remember, using gimmicks are artifical means to produce almost negligent speed increases. Using proper coding techniques (and keeping the amount of code to a minimum) will produce the best results.

More to come when I'm not so tired