WordPress Optimization markkelnar | WP Engine @renderandserve | wpengine.com/optimizing-WordPress

WordPress Optimization
WordPress Optimization
markkelnar | WP Engine
@renderandserve | [email protected]
wpengine.com/optimizing-WordPress
WordCamp Atlanta 2012
WordPress Optimization
Who is this guy?
Head of Technology, System Administration, database, product
development at WP Engine
I'm not a power-point guy, please excuse my mistakes. If I had my way, this presentation would look like this
class WCATL extends presentation
{
protected $name;
function __constructor()
{
parent::__constructor();
$this->name = 'Word Camp Atlanta';
$this->bg_color = '#808080';
}
}
$p = new WCATL();
$p->scroll();
WordPress Optimization
Why are you here?
You want your site fast
Keep readers/customers on your site
Survive heavy visitor load
Scale – When you're on techcrunch, mashable or daringfireball, you
want to survive
WordPress Optimization
You are doing it wrong!
But you don't know it.
WordPress Optimization
Who are you?
Site admin, content contributor
Designer, theme developer
Plugin developer
Backend developer, admin, dba, etc.
WordPress Optimization
What can I optimize?
Hosting is about layers, but which one?
Layman's term, not that techno-jargon ...
HTML, CSS, JS, images, web server, database, WordPress, theme,
plugin, cache, minify
LAMP, TTL, CDN, cache, Apache, PHP, static content, dynamic
content
WordPress Optimization
Where do I start?
Use profiling tools to find your bottleneck
WP-Tuner
WPDB Profiling
WPspeedometer.com
Yslow
webpagetest.org
yougetsignal.com (reverse IP address)
Command line fun:
`ab -n 100 http://wpengine.com` (Apache Benchmark)
`curl -I wpengine.com` (that's a dash-eye)
WordPress Optimization
WordPress Optimization
CDN
Content Delivery Network
Have another service serve your static files (jpg, js, css) from their domain
Say that again? Off-load statics (jpg, png, css, js) so it doesn't load from your web server
Store static files closer to end user – global proximity
Paths in your HTML point the browser to the CDN service:
cdn.yourdomain.com/wp-content/themes/image.png
Cloud cache service (CloudFlare), Amazon S3, etc
WordPress Optimization
CDN
Paths – It's all in what your HTML tells the browser
Without CDN
<img src="http://markkelnar.com/wp-content/uploads/family.jpg" alt="shredder" />
With CDN
<img src="http://mark.some-cdn-service.com/wp-content/uploads/family.jpg"
alt="shredder" />
When the service mark.some-cdn-service.com needs the image, after TTL has expired, the cdn
service loads (pulls) a fresh copy from markkelnar.com
WordPress Optimization
Off-loading content
Poor-man's CDN, serve images from Flickr
Amazon S3 – host entire site there, or even just statics
Use external source for comments, like disqus-comment-system
Popular posts / related content metrics – outbrain, nrelate
WordPress Optimization
Reduce, reuse
WPSmush it plugin
Everytime you add an image, it does it for you. Yahoo! Smush all your existing images.
Do the other fun front end developer things
Minimize HTTP requests – CSS sprites
CSS at the top of the page, JS at the bottom
Search for “Yahoo performance rules”
Ads on your page
Load them asynchronously or maybe iframe.
Are your ads cache busting? Do they have to?
WordPress Optimization
Load from multiple
sub-domains
yourdomain.com
good:
foo1.yourdomain.com, foo2.yourdomain.com
better:
foo1.otherdomain.com, foo2.otheromain2.com
Difficult to do. More overhead to configure and support.
WordPress Optimization
That's front end tweaks
Now what?
What good is a fast front end with a slow back end?
What if the back end can't handle what still comes through?
WordPress Optimization
Review your theme
Theme – know your theme. Did you buy it? Codex? Off the street?
HTML - does it validate?
CSS at the top, JS at the bottom (not inline)
PHP
- Any weird code (if it looks bad, it probably is)
- weary of file_get_contents() / fgets()
- base64_decode() (injected malware or unnecessarily compressed code)
WordPress Optimization
Pull your data wisely
What could possibly go bad here?
WordPress Optimization
Keep WP up to date
Why wouldn’t you?
Code optimizations, core changes, security
WordPress Optimization
Unused plugins
- deactivate plugins you don’t use at all
- delete plugins you don’t use at all
WordPress Optimization
Beware of poor performers
Bad PHP code
Poor use of DB calls, update/insert to DB on every page load
Don't scale under load, cripple the back end
Put stuff on wp-cron scheduler that pops too often.
Ex: (but not limited to)
- backupwordpress backwpup - broken-link-checker
- dynamic-related-posts
- file-commander
- google-sitemap-generator
- LinkMan (MyReviewPlugin Link
Man)
- MyRP (MyReviewPlugin)
- wp-symposium-alerts
WordPress Optimization
RSS feed
How many requests to your blog are /feed?
Are you using a service like feedburner?
WordPress Optimization
Show me the cache!
Let's start with plugins
W3-Total-Cache, WPSuperCache
Has features to do CDN path rewrites, page and object and db caching, minification, cache
purging/clearing
WP-Minify
JS, CSS – remove white space, comments sent to end user (browser)
WordPress Optimization
Browser Caching
What is it?
HTTP Cache-Control, Expires headers, Entity Tags
(ETags)
Already done for me? W3-Total-Cache, WPSuperCache
Gzip compression on server and uncompressed in browser
WordPress Optimization
Server side caching
What is it? saves bandwidth and improves performance
HTTP Accelerator server– reverse proxy caching behind nginx
Memcached server – object caching, persistent vs transients
opcode: caching compiled PHP code bytecode
object caching: in memory key-value storage for data, transients
page caching: full caching of HTML page
Tools for the job:
APC, Eaccerator, Xcache, Zend Optimizer, ionCube
WordPress Optimization
Web server
- Move as much as possible out of Apache
- Stand up Nginx in front of Apache (reverse proxy)
- Don't run your PHP in Apache at all, use PHP Fast CGI, lighthttpd,
etc.
- Server static files from disk in Nginx
- Put known redirects (301/302 in Nginx config)
- Move .htaccess rules to Apache httpd.conf or better yet Nginx
config.
- Google Page Speed Apache module
WordPress Optimization
MySQL DB
- Optimize tables, clean house
- PHPMyAdmin, OptimizeDB, manually
- Tables, Innodb (transactional, faster for writes) vs MyISAM (can be
less memory)
- Master/Slave replication + HyperDB
- dedicated server(s)
- turn on log and investigate mysql-slow.log
- database caching
- mysqltuner.pl
WordPress Optimization
If you're reading this, you're too geeky
Server: metal server vs virtual or cloud instance
OS: *nix, sun, MS
Packages: compiled, package installed
Hardware: CPU + cores, memory, SSD disk drives
DB: MySQL, Percona,
WordPress Optimization
No-Nos
- Don't edit WP-core files (wp-includes, wp-admin)
- Amazon EC2 not silver bullet
- Beware of plugins that update database tables on every page load.
Use external resources.
WordPress Optimization
Q&A