28
WordPress Optimization WordPress Optimization markkelnar | WP Engine @renderandserve | [email protected] wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization markkelnar | WP Engine @renderandserve | [email protected] wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

Embed Size (px)

Citation preview

Page 1: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

WordPress Optimization

markkelnar | WP Engine@renderandserve | [email protected]

wpengine.com/optimizing-WordPress

WordCamp Atlanta 2012

Page 2: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com 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();

Page 3: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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

Page 4: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

You are doing it wrong! But you don't know it.

Page 5: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Who are you?Site admin, content contributor

Designer, theme developer

Plugin developer

Backend developer, admin, dba, etc.

Page 6: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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

Page 7: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Where do I start?Use profiling tools to find your bottleneck

WP-TunerWPDB ProfilingWPspeedometer.comYslowwebpagetest.orgyougetsignal.com (reverse IP address)

Command line fun:`ab -n 100 http://wpengine.com` (Apache Benchmark)`curl -I wpengine.com` (that's a dash-eye)

Page 8: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Page 9: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

CDNContent 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

Page 10: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

CDNPaths – 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

Page 11: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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

Page 12: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Reduce, reuseWPSmush it pluginEverytime you add an image, it does it for you. Yahoo! Smush all your existing images.

Do the other fun front end developer thingsMinimize HTTP requests – CSS spritesCSS at the top of the page, JS at the bottomSearch for “Yahoo performance rules”

Ads on your pageLoad them asynchronously or maybe iframe. Are your ads cache busting? Do they have to?

Page 13: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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.

Page 14: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

That's front end tweaksNow 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?

Page 15: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Review your themeTheme – 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)

Page 16: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Pull your data wiselyWhat could possibly go bad here?

Page 17: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Keep WP up to dateWhy wouldn’t you?

Code optimizations, core changes, security

Page 18: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Unused plugins - deactivate plugins you don’t use at all

- delete plugins you don’t use at all

Page 19: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Bad PHP codePoor use of DB calls, update/insert to DB on every page loadDon't scale under load, cripple the back endPut 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

Beware of poor performers

Page 20: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

RSS feedHow many requests to your blog are /feed?Are you using a service like feedburner?

Page 21: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Show me the cache!Let's start with plugins

W3-Total-Cache, WPSuperCacheHas features to do CDN path rewrites, page and object and db caching, minification, cache purging/clearing

WP-MinifyJS, CSS – remove white space, comments sent to end user (browser)

Page 22: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Browser CachingWhat 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

Page 23: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Server side cachingWhat 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

Page 24: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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

Page 25: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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

Page 26: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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,

Page 27: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

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.

Page 28: WordPress Optimization markkelnar | WP Engine @renderandserve | howdy@wpengine.com wpengine.com/optimizing-WordPress WordCamp Atlanta 2012

WordPress Optimization

Q&A