PHP performance tips
Author: Eric Higgins, Google Webmaster
Recommended experience: Beginner to intermediate PHP knowledge
PHP
is a very popular scripting language, used on many popular sites across
the web. In this article, we hope to help you to improve the
performance of your PHP scripts with some changes that you can make
very quickly and painlessly. Please keep in mind that your own
performance gains may vary greatly, depending on which version of PHP
you are running, your web server environment, and the complexity of
your code.
Profile your code to pinpoint bottlenecks
Hoare's dictum states that Premature optimization is the root of all evil
,
an important thing to keep in mind when trying to make your web sites
faster. Before changing your code, you'll need to determine what is
causing it to be slow. You may go through this guide, and many others
on optimizing PHP, when the issue might instead be database-related or
network-related. By profiling your PHP code
, you can try to pinpoint bottlenecks.
Upgrade your version of PHP
The
team of developers who maintain the PHP engine have made a number of
significant performance improvements over the years. If your web server
is still running an older version, such as PHP 3 or PHP 4, you may want
to investigate upgrading before you try to optimize your code.
Migrating from PHP 4 to PHP 5.0.x
Migrating from PHP 5.0.x to PHP 5.1.x
Migrating from PHP 5.1.x to PHP 5.2.x
Use caching
Making use of a caching module, such as Memcache
, or a templating system which supports caching, such as Smarty
, can help to improve the performance of your website by caching database results and rendered pages.
Use output buffering
PHP
uses
a memory buffer to store all of the data that your script tries to
print. This buffer can make your pages seem slow, because your users
have to wait for the buffer to fill up before it sends them any data.
Fortunately, you can make some changes that will force PHP to flush the
output buffers sooner, and more often, making your site feel faster to
your users.
Output Buffering Control
Avoid writing naive setters and getters
When
writing classes in PHP, you can save time and speed up your scripts by
working with object properties directly, rather than writing naive
setters and getters. In the following example, the dog
class uses the setName()
and getName()
methods for accessing the name
property.
class
dog
{
public
$name
=
''
;
public
function
setName
(
$name
)
{
$this
->
name
=
$name
;
}
public
function
getName
()
{
return
$this
->
name
;
}
}
Notice that setName()
and getName()
do nothing more than store and return the name
property, respectively.
$rover
=
new
dog
();
$rover
->
setName
(
'rover'
);
echo $rover
->
getName
();
Setting and calling the name
property directly can run up to 100% faster
, as well as cutting down on development time.
$rover
=
new
dog
();
$rover
->
name
=
'rover'
;
echo $rover
->
name
;
Don't copy variables for no reason
Sometimes
PHP
novices attempt to make their code "cleaner" by copying predefined
variables to variables with shorter names before working with them.
What this actually results in is doubled memory consumption (when the
variable is altered), and therefore, slow scripts. In the following
example, if a user had inserted 512KB worth of characters into a
textarea field. This implementation would result in nearly 1MB of
memory being used.
$description = strip_tags($_POST['description']);
echo $description;
There's no reason to copy the variable above. You can simply do this operation inline and avoid the extra memory consumption:
echo strip_tags($_POST['description']); Avoid doing SQL queries within a loop
A common mistake is placing a SQL query inside of a loop. This results in
multiple round trips to the database, and significantly slower scripts.
In the example below, you can change the loop to build a single SQL
query and insert all of your users at once.