Speeding up your WordPress Site - WordCamp Toronto 2015

Preview:

Citation preview

Speed up your WordPress siteAlan Lok WirelessLinx Inc.

Motivations

User experience1

Search engine optimization2

Your wallet

Less on-call issues!

1: http://www.webperformancetoday.com/2012/02/28/4-awesome-slides-showing-how-page-speed-correlates-to-business-metrics-at-walmart-com/ 2: http://googlewebmastercentral.blogspot.ca/2010/04/using-site-speed-in-web-search-ranking.html

What is a LAMP stack

Database PHP Engine

Your app

Operating System

Web Server

Performance gains can be found in each layer

Reverse Proxy

Cache

Internal Tune-upsDigging into your WordPress site to make it better

The simple stuff

Update your plugins

Remove unused themes and plugins

404 errors

WordPress plugins to speed things up

W3 Total Cache

Super Cache

Zen Cache

Redu

ceIm

ages

, JS

, CSS

Reuse

Code

(CSS, JS,

HTML, PHP)

RefactorHTTP Response Content Body

Profile your applicationAnalyze your application with a PHP profiler such as BlackFire.io or xdebug/cachegrind

Look for high number of apply_filters, mysql calls, and wp_cache_get

Profile your DOMMake your page render faster too

Database

Check your slow query log

Debug: log your database queries

Try to “explain” your query

Trim un-needed data (comments, deleted posts, etc…)

Have you been hacked?

Hacked instances are typically slower because of additional JS/PHP payload

Check your installation / hosting environment

Some command line tools: wp-cli, findbot.pl

Online tools: https://sitecheck.sucuri.net/ and Google Webmaster Tools

Operational ImprovementsImprovements you can make outside WordPress

You get what you pay forThere is no such thing as “unlimited” hosting or space

Ensure you are paying for the level of performance you expect given the traffic estimates

Diminishing returns on performance when buying more resources

DatabaseMySQL versions and variations (MariaDB, Percona, Community)

DB Engine: Convert tables from MyISAM to InnoDB

Some* my.cnf tuning

InnoDB buffer size, Query Caching

HyperDB for database splitting*

Some performance references: http://www.liquidweb.com/kb/mysql-5-1-vs-5-5-vs-5-6-performance-comparison/ https://www.percona.com/blog/2011/10/10/mysql-versions-shootout/ http://vbtechsupport.com/657/

Web Server TechnologyWeb server technologies:

nginx vs Apache

PHP process management in Apache

php-fpm vs mod_php vs hhvm

prefork, vs worker/event

mod_pagespeed, php-opcache

When does it matter?More food for thought: http://blog.bitnami.com/2014/06/performance-enhacements-for-apache-and.html https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations http://hhvm.com/blog/9293/lockdown-results-and-hhvm-performance

Credit: Digital Ocean

HTTP changes

Content compression

Expiry headers for content type

Cache directive

References:https://tools.ietf.org/html/rfc7234 http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en

Content DeliveryReducing number of access to your web server will reduce your costs (bandwidth and CPU needs)

Consider using public CDN for shared JS/CSS

Pay for a cheap CDN and use a plugin to rewrite your assets to the CDN

Web Application Protection*SaaS: Sucuri / CloudFlare / Incapsula / Akamai

Plugins: WordFence / Better WP Security

Spam Protection: Akismet

PHP: suhosin

Server: mod_security

*not an exhaustive list or endorsement

Monitor your siteApplication Performance Monitor (eg. New Relic, AppDynamics)

Server Monitoring (eg. LongView, CloudWatch, DataDog)

Last mile / Page Health (eg. Pingdom, New Relic Synthetics, Gomez)

Thanks!Twitter: @alan_lok Web: http://wlx.ca

Slideshare: www.slideshare.net/alanlok1