2. This talk is for beginners
This is not “how to profile PHP”
This is not “how to use HipHop”
This is not how to profile your network
Velma would be bored (you might be too)
I will no doubt rant
Disclaimer
7. Make it external
One file – minimized and compressed
(minify)
Put it at the top
Use sprites for images
Avoid expressions
No @import
Use conditional tags for IE issues, not css
hacks
Specific Selectors
Give images dimensions
CSS
8. Make it external
One file – minimized and compressed
(minify)
Put it at the bottom
Or defer the loading completely
Use a well maintained framework
document.write is a bad bad thing
Javascript
9. Use the right format – png, gif or jpg
Compress that image – lots of
compression tools available
Keep them small
Scale them on the server, not with html
size/width
Have a small, cacheable favicon.ico
Use sprites for layouts
Images
10. Keep them small
Keep them very domain specific
Cookies (om nom nom)
11. Compress, compress, compress
Use a CDN and/or media server
Reduce DNS Lookups
No 404‟s, empty img/hrefs
Avoid redirects
Parallelize downloads
Watch external script use! (fb, google,
social anything)
HTTP Requests
12. Use cache control headers!
◦ Expires
◦ Last-Modified
◦ (best)
◦ Cache-Control
◦ Etag
◦ (harder to get right)
Be kind to proxies as well
Client Side Caching
13. http://developer.yahoo.com/performance/
rules.html
http://code.google.com/speed/page-
speed/docs/rules_intro.html
http://www.w3.org/Protocols/rfc2616/rfc2
616.html
Use the Google
Reference
16. Security
Speed
Some Pain (worth it)
Compile your own – it‟s faster then the
distros!
◦ Drop your debug data
◦ Tune to your architecture
◦ At the very least do PHP, Server, Database
Upgrade your Software
17. “memcache does precisely f**k all for
opcode caching” – Michael Maclean
This is the #1 best way to speed up your
PHP site
Install APC (or something)
18. Simple servers for static content
Cache full pages and bypass PHP
Dynamic images and CSS are a pain, find
another solution
CDN solutions are more affordable then
ever before
run a reverse proxy-cache
Don’t Use PHP and Use a CDN
20. Add more CPUs or more cores
Add more RAM
Use RAID or Solid State drives
Network can definitely be a bottleneck –
but like PHP it‟s the last thing to fix - hire
a really smart guy
Hardware
23. Mysql – has profiler built in
Postgresql – turn on logging and use
analyzer on logs
SQL Server – built in profiler
MongoDB – built in profiler
Profile – Don’t Guess!
24. Do not guess
Add indexes where needed
Sometimes it‟s faster to do the work in
PHP
Log on the PHP side, count on the PHP
side… then do it on the server side too
Always try to do fewer queries
Analyze your Queries
25. Query Caching
◦ PHP side – cache generated queries
◦ Server side – query cache
Results Caching
◦ Memcached is your friend
Libmemcached = php‟s memcached (faster, non-
portable)
php sockets = php‟s memcache (slower,
completely portable)
◦ File caching – sometimes IO is faster then db
Cache Everything
26. Use transactions as appropriate
Normalize your data (or use nosql)
Minimize connections to the db
Foreign keys can be slower, use cautiously
Best Practices are “Best” for a
Reason
29. XhProf
Xdebug
DBG (free and pay versions)
APD – older but serviceable
Inclued
Memtrack
Scream (also in xdebug)
Profile – Don’t Guess
30. “We should forget about small efficiencies,
say about 97% of the time: premature
optimization is the root of all evil.”
- Donald Knuth
“Knowing when optimization is premature
defines the difference between the master
engineer and the apprentice.”
- Theo Schlossnagle
The Boss knows Best
31. In-memory sessions are faster than disk
or database equivalents. (mm, apc,
wincache or memcache)
Cache pages partially, or fully – store in
memcache, have apache bypass PHP
Cache any and everything
Cache in layers – browser, full page,
partial page, data, query results,
application settings
Cache
32. Gearman it
Fork it
Cron it
Exec it
Parallelization needs communication
though!
Farm it out
33. Reflection is nice – but it is VERY slow and
memory heavy
This kind of job is much better when
handed off to C (yaml extension, for
example)
Writing extra code is worth the
performance improvement
Just because you CAN do something in
PHP just like $lang doesn‟t mean that‟s
the best solution
Avoid Runtime Introspection
34. Avoid lots of stats
Use an opcode cache (yes, I‟m saying it
AGAIN)
Try not to have too many files in a
directory
include_path as short as possible
Use absolute paths
File and I/O
35. “I'm saying that if your autoloader is a
significant fraction of the work your app
does, then you are either Doing It
Wrong™, or really unlikely, Doing It Very
Well Indeed™ I know which I favour”
-Michael Maclean
Balance Speed and Maintainability
Autoload and Includes
36. NFS is of the devil – do not use it
Errors are always created, even if you
don‟t see them
◦ error_reporting(-1);
@ is terrible! Set and restore error
handler if you know something will spit,
it‟s STILL faster
Very Bad Things
37. „‟ is a wee bit faster than “”
echo not print
Don‟t use magic methods
++$i not $i++
$_SERVER['REQUEST_TIME'] not time()
static methods are faster
$function() not call_user_func(„function‟)
arrays are faster then objects
Micro Optimizations (Here be Evil)
40. “You are trading „development speed‟ for
„processing speed‟ … all you do is waste all day
reading docs to produce a half-assed project”
– Bob Majdak Jr
“ORMs are great for automating the sort of query
that an idiot could write, and useless for
anything non-trivial.”
– Greg Chiasson
http://highscalability.com/blog/2011/5/2/stack-
overflow-makes-slow-pages-100x-faster-by-
simple-sql-tu.html
ORMS
41. Remove require/include calls and use
autoloader or include_all files
Avoid lots of configuration in parseable
files (yaml, ini, etc)
Turn off Debug features
Use any sort of database caching available
Watch your “dispatch loops” – write
something custom if you need to
Watch Plugin loading of all types
Frameworks
42. Switch to another system (lots of importers)
Use a cache plugin – or two, or three
Keep wordpress up to date
Don‟t use a lot of plugins
Don‟t use the wp-db-abstraction plugin or
any other plugin doing crazy things to the
core
It‟s just PHP, do all the PHP things too!
Wordpress
43. Install a Cache Install a Cache
plugin plugin
Limit other Plugins Limit other Plugins
in use in use
Disable anonymous Make sure
sessions debugging is off in
Use a simple theme production
All the other PHP Turn off statistics
stuff All the other PHP
stuff
Drupal, Joomla