15
PHP optimization based on many information found on the internet and on personal experience by Fabrizio Parrella

Php optimization

Embed Size (px)

Citation preview

Page 1: Php optimization

PHP optimization

based on many information found on the internet and on personal experience

by Fabrizio Parrella

Page 2: Php optimization

How where the tests performed

Those tests have been made and repeated multiple times then the values have been averaged and the outliers removed. Your script/server might

give you different results, this might be because your CPU/memory/internal process/PHP Garbage

Collector/etc... might interfere

Page 3: Php optimization

String OutputIs there a difference between “echo” and “print” ?

“echo” and “print” serve the same exact purpose.

Various tests show that “echo” is about 10-15% faster when using comma separated items.

Page 4: Php optimization

Variable Type Checkingisset() vs. empty() vs is_array()

Often we need to check if a variable is set, so what is the faster ?

isset() and empty() are pretty much identicalis_array() takes twice as long

Page 5: Php optimization

Quotes“ vs. '

Lots of information on the web about quotes.. which is faster ?

In the past there were some minor performance differences between “ and ' for a string that

doesn't contain variables.

In today's versions of PHP looks like that the argument has been satisfied on both sides as

they are pretty much the same

Page 6: Php optimization

Counting Loopsfor vs. while

While or For.. For or While ? Many tests have been done and many results have been posted all over

the internet.

In reality, there is not enough difference in execution to make any very impact in the execution of the

application.

Micro-optimizing ?The “while” is about 13% faster on an empty loop

that counts up to 1,000,000

Page 7: Php optimization

Read Loopsforeach vs. for vs. while(list() = each())

This test is very tested like the “Counting Loops” and there are various results around.

In my experience and the most commonly results from other tests is that “foreach()” without $key is the winner. The next closest is the “for()” and the

last is the “while()”.

If you must use the “while()” do not forget to use “reset()” first to incredibly speed up the process.

“reset()” is good to use anytime you do a loop to reposition the pointer to the beginning

Page 8: Php optimization

Control Structuresswitch/case/default vs. if/elseif/else

There is no real difference between “switch” and “if”

There is a difference is the equality sign, where === is about 10% faster than ==

Page 9: Php optimization

Counting LoopsFor-Loop tests – calculate size in advance

Unsurprising results, calculate the size of the loop ahead of time for a 1000x repetitions is incredibly

faster:

test time

Pre-calc - count() 243µs

No pre-calc - count() 109,472µs

Pre-calc - sifeOf() 200µs

No pre-calc - sizeOf() 104,085µs

Page 10: Php optimization

Modify Loopforeach() vs. for vs. while(list() = each())

Often happens that you need to modify the array while you are looping it, when doing so it is best

not to loop the the array while modifying it

test time

foreach($array as $k=>$v) $array[$k] = 'value'; 362µs

while(list($k) = each($array)) $array[$k] = ''value'; 165µs

$ks = array_keys($array);$size = count($k);for($i=0; $i<=$size; $i++) $array[$ks[$i]] = 'value';

72µs

Page 11: Php optimization

Got Perfect Code ?so you wrote perfect code, but you want it to go faster

Have you ever heard of OPCODE caching?

Page 12: Php optimization

What is OPCODE caching?When a PHP script is called by a user:

●User Requests the Page●Web Server Compiles the PHP script (interprets)●Executes the Compiled Version of the Page●Output the Data

Normal Applications do not need to be compiled as they are often pre-compiled, however scripting languages like PHP, Perl, Ruby, etc., are compiled on demand and interpreted. (there is a difference between compiling and interpreting, but that is for another time).

As you can imagine, converting source code into machine code (opcode) can be resource intensive. Opcode caches will store opcode in a cache and execute is from there instead than constantly recompiling the code. This basically eliminate the second step and seriously speed up the site.

Page 13: Php optimization

It is Worth ?You know what it is.. but is it worth to spend time installing it ?

Online research showed me that websites had improvements between 200% and 700%.

My personal experience showed me a time saving of 120%.

For example a page that before OPCode caching took 10 µs to load, with APC installed it took 4µs.

Page 14: Php optimization

The Best OPCode cacheeAccellerator, APC, Xcache, ionCube, Turck MMCache, Zend, etc..

There are MANY different OPCode cache that can be installed for PHP, some are new, and some

are well seasoned.

My favorite are the ones that use shared memory to reduce slow disk accesses.

I have tested different ones, my current favorite is APC with PHP 5.3

Page 15: Php optimization

BEST OPTIMIZATION?Done all of this but PHP is still slow ?

You can optimize your PHP code and install OPCode cache but if you still have issues you can

check the followings:

●Database Queries●Disk accesses (fopen, dir, etc.)●Network (DNS, open on URLs, etc.)●Memory usage (memory_get_usage, memory_get_peak_usage)●Modules Installed●Endless Loops, Bugs