PROFILING & OPTIMIZATION
Tools, guidelines, and techniques

Saturday, 9 November, 13
PERFORMANCE

Saturday, 9 November, 13
GETTING BUY-IN

Saturday, 9 November, 13
HIGHER CONVERSION RATES

Saturday, 9 November, 13
SLOW MOBILE
CONNECTIONS

Saturday, 9 November, 13
RULES; MORE LIKE
GUIDELINES

Saturday, 9 November, 13
Guideline

MEASURE EVERYTHING

Saturday, 9 November, 13
Guideline

HUNT THE BIG FISH

Saturday, 9 November, 13
Guideline

START CHEAP & ITERATE

Saturday, 9 November, 13
Cost Order
Minify assets
Compress images
Reduce number of HTTP requests
Optimize database queries
Add caching
Code optimization

Saturday, 9 November, 13
JUNK UP FRONT

Saturday, 9 November, 13
Junk Up Front

Saturday, 9 November, 13
Measuring
Chrome developer tools

Saturday, 9 November, 13
Junk up front
Number of requests
Number of hosts
Image count & image size
Script count & script size

Saturday, 9 November, 13
Fixing

Smushit (pngcrush, jpegtran, imagemagick)
Uglify.js, CSSMin
Make, phing, rake, grunt, shell scripts

Saturday, 9 November, 13
Image sprites

Easy way to reduce requests, and overall page size.
Data-URIs.
Icon WebFonts.

Saturday, 9 November, 13
Guideline

AVOID WORK TO GO FASTER

Saturday, 9 November, 13
WEBSERVER TRICKS

Saturday, 9 November, 13
Measuring
Chrome developer tools

Saturday, 9 November, 13
Webserver tricks

GZIP all the things.
Far Future cache headers.
Consider a CDN.

Saturday, 9 November, 13
SQL MOLASSES

Saturday, 9 November, 13
Database slowness
Many backend performance issues are caused by too many, or
slow queries.
Mysql has a pretty terrible query planner.
Sub-queries and derived table joins will eventually catch fire.
Slow query logs, mtop, or monitoring like new relic are your best
friend.

Saturday, 9 November, 13
Database slowness
Slow query logs - Percona makes great tools for MySQL.
Disable query caching.
Run EXPLAIN on slow queries.
Add indexes/tweak queries, and repeat.

Saturday, 9 November, 13
Explain Queries
Visual explain makes it easier.

Saturday, 9 November, 13
Indexes

Index commonly used columns.
Column order in matters in indexes.

Saturday, 9 November, 13
CACHING

Saturday, 9 November, 13
Caching

Can be expensive to rollout, if you need new infrastructure
Cache expiration is really really hard.

Saturday, 9 November, 13
What to Cache
Results that don’t change often
Use monitoring/analytics to find the busiest pages.
Start using caching there.
Expand once you’ve learned more.

Saturday, 9 November, 13
Where to cache

Hopefully in RAM
Failing that in shared memory
Disk :(

Saturday, 9 November, 13
Optimize cache use

Watch cache miss rate.
Tune cache expiration so you miss less often.

Saturday, 9 November, 13
Guideline

OPTIMIZE CODE LAST,
MOST OF THE TIME

Saturday, 9 November, 13
JAVASCRIPT

Saturday, 9 November, 13
PHP

Saturday, 9 November, 13
Javascript tools

Chrome dev tools are the gold standard.
CPU profiles are invaluable.
Heap comparisons can be used to find memory leaks.

Saturday, 9 November, 13
CPU Profiler
Chrome dev tools

Saturday, 9 November, 13
CPU Profiler
Chrome dev tools

Saturday, 9 November, 13
CPU Profiler
Chrome dev tools

Saturday, 9 November, 13
CPU Profiler
Chrome dev tools

Saturday, 9 November, 13
PHP TOOLS

Saturday, 9 November, 13
XHProf

PECL extension produced by Facebook.
Captures runtime metrics at a function level.
Possible to use in a sub-sample of production unlike xdebug.

Saturday, 9 November, 13
Xhgui
Nicer UI to XHProf data

Saturday, 9 November, 13
Xhgui
Nicer UI to XHProf data

Saturday, 9 November, 13
XDebug

Not suitable for servers with traffic,
Very detailed results.

Saturday, 9 November, 13
Webgrind
XDebug UI

Saturday, 9 November, 13
Other PHP tweaks

Opcode caching is a must.
Don’t use file based sessions.

Saturday, 9 November, 13
RECAP

Saturday, 9 November, 13
MEASURE EVERYTHING

Saturday, 9 November, 13
BE THRIFTY

Saturday, 9 November, 13
START IN THE FRONT

Saturday, 9 November, 13
AVOID WORK

Saturday, 9 November, 13
OPTIMIZE CODE

Saturday, 9 November, 13
THANKS

Saturday, 9 November, 13
Thanks

mark_story on Twitter.
markstory on Github.
Rate this talk: https://joind.in/9994

Saturday, 9 November, 13

Performance and optimization