Wordpress ~ Speed Optimization
Apache
To enable apache module in Plesk, go to Tools & Settings / Apache Web Server Settings
and check the module.
Testing the performance
It’s not enough to enable gzip compression in your server - the client
also needs to ask for it in its requests via the Accept-Encoding: gzip
header.
ab -n 1000 -c 1 -k -H “Accept-Encoding: gzip, deflate” https://www.hostingtipp.ch/ ab -n 1000 -c 5 -k -H “Accept-Encoding: gzip, deflate” https://www.hostingtipp.ch/ ab -n 1000 -c 10 -k -H “Accept-Encoding: gzip, deflate” https://www.hostingtipp.ch/
| Technology | Req | Req | Req | Notes | | | Per | Per | Per | | | | Sec | Sec | Sec | |
/1 | /5 | /10 | ||
---|---|---|---|---|
Apache w/ mod_php & pagespeed & gzip | 5.99 | 23.37 | 25.27 | fastest Apache setup, but not enough secure |
nginx w/ PHP-FPM | 6.36 | 25.15 | 24.74 | |
nginx as above + gzip compression | 6.29 | 25.45 | 25.73 | |
nginx as above + other tweaks | 6.26 | 24.85 | 25.40 | but GTmetrix improved 88/69% to 93/75% because of “Leverage browser caching” |
nginx as above + workers & etc | 6.23 | - | 23.68 | small tweaks, but TTFB (434 ms) score from 51 to 74/100. |
Switch to SSL | - | - | - | TTFB (1009 ms) score from 14/100. |
Upgrade PHP 5.6.6 & Zend opCache | 11.16 | 52.74 | 59.21 | Woow! TTFB (769 ms) score from 14 to 38/100. |
Object Cache: APCu + plugin | 6.88 | 30.07 | 31.24 | Avoid! Confirmed: APCu Object Cache Backend. TTFB 814 ms (32/100) |
Object Cache: APCu + W3TC plugin | 10.44 | 46.93 | 50.92 | Still slower? About 10%. TTFB 780 ms (36/100) |
Full Page Cache: W3TC Disk Enhanced | 29.64 | 141.36 | 186.35 | |
Full Page Cache: W3TC APCu | 34.86 | 131.90 | 182.81 | |
Full Page Cache: W3TC Memcache | 32.75 | 129.57 | 191.27 | TTFB 677 ms (47/100) |
Full Page Cache: WP-FFPC APCu | 36.98 | 136.88 | 185.57 | |
Full Page Cache: WP-FFPC Memcache | 36.19 | 140.00 | 190.55 | |
Full Page Cache: WP-FFPC Memcached | 36.87 | 138.74 | 193.19 | |
Full Page Cache: nginx fastcgi_cache | 49.50 | 140.95 | 192.44 | Microcaching 5s: TTFB 696 ms (45/100) |
Optimization: ngx_pagespeed | 28.37 | 121.77 | 184.13 | TTFB 375 ms (77/100) |
Optimization: ngx_pagespeed w-memcached | 30.06 | 120.46 | 187.57 | The same, but easier - no need for dir permissions |
On webpagetest.org, we have only First Byte Time (back-end processing) score of 51/100. Current value of 661 ms for First Byte Time must be lowered below 177 ms First Byte Time.
Optimizing NGINX TLS Time To First Byte (TTTFB)
How Time to First Byte Impacts Web Performance
Time to first byte (TTFB) had the most significant correlation: inversely correlated with search engine rankings. ie. its important for seo. no correlation with page load speed but sizable inverse correlation with TTFB. (position 1: 0.39 sec to position 8: 0.51). It’s useless for UX, but has extreme effect for SEO.
Stop worrying about Time To First Byte (TTFB) How Website Speed Actually Impacts Search Ranking - Moz
WordPress Cache Plugins
Support » WP Super Cache vs W3 Total Cache wp-cache « Tags W3 Total Cache The Best WordPress Caching Plugins WP Super Cache vs W3 Total Cache Comparison WordPress Caching Plugin Test - W3TC vs SuperCache vs QuickCache
Checklist For Perfect WordPress-Nginx Setup WordPress Nginx Tutorials
WP-FFPC Plugin: Varnish alternative for full-page caching
In my tests, WP-FFPC is around 10% faster than W3TC. But, I am still not sure if I should use it because it is only a page-cache, and W3TC has multiple other options enough to keep him installed.
WP-FFPC supports a lot of storage backends (both PHP Memcache and Memcached extensions, APCu), except Redis.
When WP-FFPC plugin and Nginx ngx_pagespeed module are paired together, they make a perfect couple with WP-FFPC taking care of caching and Nginx ngx_pagespeed taking care of optimising static css, js and image page elements replacing the more common but complicated W3 Total Cache plugin.
No caching plugin: Time to First Byte: 234 ms (399 ms First Byte Time)
WP-FFPC full page plugin with memcached via PHP: Time to First Byte: 60 ms (267 ms First Byte Time)
WP-FFPC full page plugin with memcached via nginx: Time to First Byte: 54 ms (267 ms First Byte Time)
W3TC full page plugin with memcached via PHP: Time to First Byte: 65 ms (199 ms First Byte Time)
While looking at the source code I concluded (hook: transition_post_status) that WP-FFPC invalidates cache for post/page on any change. So it is safe to increase cache expiration period from 300 seconds (5 min) to 12 hours (43200 sec)
WordPress Optimization/Caching
WP-FFPC Speed Test Based on above test results, we should be using Memcached via PHP option.
Best Wordpress Cache Plugin: WP-FFPC
W3 Total Cache (W3TC) Plugin: de-facto standard
Reason to install W3TC anyway? There is no better CDN management in WordPress than W3TC. Using FFPC for page cache and W3TC for CDN and object cache.
W3TC Settings
General Settings
sub-section, General
, check Toggle all caching types on or off at once.
Disable features if you don’t have them (CDN, CloudFlare, etc).
Minify
sub-section: There is an option called Minify mode
. Select the Auto
option. Also, under HTML & XML
, check Enable
in the HTML minify settings:
.
You can also check the other options, but make sure to test your site to see if
it breaks.
In the Browser Cache
sub-section, enable the following:
Set expires header
, Set cache control header
, Set entity tag (eTag)
The Ideal W3 Total Cache Settings, with screenshots How to Setup WordPress Caching with W3 Total Cache (W3TC)
Best Settings to work with W3 Total Cache
Best W3 Total Cache Settings For Increasing Website Speed Caching Plugins for WordPress: Five Leading Solutions
Disable the comment signature of W3TC
Disable the W3 Total Cache Footer Comment
CDN: using Cloudflare with Wordpress
Using CloudFlare and WordPress
W3 Total Cache & CloudFlare Speed Up WordPress with PageSpeed or CloudFlare CDN
Top CDN Services to Make Your WordPress Site Blazingly Fast (and More Reliable) - WPMU DEV
Integrating CloudFlare With WordPress - Tuts+ Code Tutorial
muypotente.ch is using WordPress HTTPS plugin
Disable stylesheets selectively
Lot of styles and scripts are used only on some specific pages.
How WordPress Plugins Affect Your Site’s Load Time
Prevent WordPress to compress JPEG images on upload
Wordpress compresses all JPEG images on upload. GIFs and PNGs are not compressed. Default compression value is to 90% of original size, but usually it only looks uglier and very little space saving.
To disable this feature, add the following snippet to your theme’s
functions.php
file:
add_filter('jpeg_quality', function($arg) { return 100; });
add_filter('wp_editor_set_quality', function($arg) { return 100; });
Remove Extra JS included for Emoji Support
Starting from version 4.2, WordPress supports Emoji’s by default. It means, an extra Javascript file gets added to your site’s header to support 4 bit unicode characters.
Please note: the emoji code added in 4.2 runs asynchronously. There is no additional load time added because of it.
Disable on frontend:
remove_action('wp_head', 'print_emoji_detection_script', 7 );
remove_action('wp_print_styles', 'print_emoji_styles' );
Disable on Admin pages:
remove_action('admin_print_scripts', 'print_emoji_detection_script' );
remove_action('admin_print_styles', 'print_emoji_styles' );
WordPress emoji performance is counter intuitive Disable WordPress Emojis Remove extra Javascript file added for Emoji Support in WordPress
Hide secondary RSS feed URLs from HTML
remove_action('wp_head', 'feed_links', 2 );
remove_action('wp_head', 'feed_links_extra', 3 );
How to hide secondary feed urls in WordPress?
Remove unneeded meta-tags
How to remove unnecessary meta tags and data from WordPress pages?
remove_action('wp_head', 'wp_generator' ) ;
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'rsd_link');
wlwmanifest_link
: tagging support for Windows Live Writer.rsd_link
: similar, but link to Really Simple Discovery service
Remove jQuery Migrate
Ignoring this suggestion.
jQuery Migrate is unneeded script, but it is too small to gain some noticable benefits of disabling it.
Stop WordPress Including jQuery Migrate File Disable jQuery Migrate Loading in WP Remove jquery-migrate.js from wordpress pages
Consider doing: Google CDN for jQuery and others. Don’t Dequeue WordPress’ jQuery
Use public CDN libraries for common scripts
There a lot of articles how to replace default WordPress jQuery script with Google Library
We can also use a plugins: Use Google Libraries
Maybe?? - How to remove query string from WordPress URL? Optimize wordpress site by removing query strings from URL resources
Experts on fast Wordpress. Their configuration.
hgv/provisioning/roles/nginx/templates/etc/nginx at master · wpengine/hgv
Install Monit! Speed up WP admin with Redis and HHVM
Nice config:
Using Yii with Nginx and PHP-FPM | Wiki | Yii PHP Framework
- SPDY
-
optimize memcached (increase memory)
-
Remove orphaned keys in WP database Trim your wp_options table: select * from wp_options where autoload=‘yes’; rows with autoload are queried on each page request Wordpress: how to trim your wp_options table mysql - Slow query log of wp_options WHERE autoload = ‘yes’ - Database Administrators Stack Exchange
WOOW: WordPress wp_options table autoload micro-optimization - Sysadmins of the North MySQL database optimization with indices - Sysadmins of the North
-
optimize mysql
-
Pagespeed How to Install nginx and google pagespeed on Ubuntu 15.04 (Vivid Vervet) Installing Nginx 1.7.9 with Google Pagespeed on Ubuntu 14.04 (Trusty) | DevOps Zone How to add pagespeed on existent NGINX - UBUNTU server? | DigitalOcean Nginx module installation with PageSpeed example on Ubuntu
Nice: Diagnose admin-ajax.php Causing Slow Load Times in WP
Speed Up WordPress with these 5 Expert Tips
A Beginner’s Guide to Website Speed Optimization by Kinsta
StartSSL: Switch to HTTPS Now, For Free
Retrieving cache directly from nginx & memcached
HTTP response headers are not stored in memcached. This can be a problem
- specially for browser caching (or not). I think that the Nginx Redis
module has the same problem. I also noticed
meta-
in settings of WP-FFPC, but not sure how to use them or retrievemeta- them in nginx.
HTTP caching with Nginx and Memcached
One possible route is to use alternative modules for nginx, most notably ngx_http_enhanced_memcached_module or maybe even memc.
Some more info here
Caching in nginx (fastcgi_cache) explained
Sources:
Woow, kakve ideje:
WP-Performance/wp-performance-lazy-video: WP Performance Add Lazy on video tag from core/video block
Open source Meilisearch has plugin WP-Performance/wp-performance-meilisearch: Meilisearch implementation for WordPress
Odlično objašnjejne Difference between other mo cache plugins | WordPress.org
or or or netzstrategen/wordpress-mo-cache: WordPress plugin to speed up page load by caching translations.
DynaMo, the little-known plugins to optimize your WordPress explains plugin DynaMo by Polylang authors that is inspired by another plugin: WP Performance Pack which doesn’t seem to be maintained anymore - sve je na osnovu ovog ludilo plugina: WP Performance Pack a tu je i manja verzija Fast Translate as a minimalistic fork (extract) of WP Performance Packs localization improvements.
Od istog je autora interesantno i Dynamic Links
Run Third-Party Scripts From A Service Worker
U ovom članku Keeping Websites Fast when Loading Google Tag Manager | Crystallize, autor predlaže da se izvršavanjhe sporih skriptova pebaci u PartyTown service worker, što je odlična ideja.
Odlična ideja je Partytown na repo BuilderIO/partytown: Relocate resource intensive third-party scripts off of the main thread and into a web worker. 🎉
WordPress integration experiments:
-
WP-Performance/wp-performance-partytown: Partytown in your WordPress
-
rtCamp/wp-partytown: Add partytown support to WordPress sites.
-
official discussion: Partytown support · Issue #176 · WordPress/performance
Sandboxing with Partytown - Weston Ruter
- CodeAtCode/wp-partytown: Experimental is old but learn from it
(7) How to add partytown.js to your website for 10x gains - YouTube Introducing Partytown 🎉: Run Third-Party Scripts From a Web Worker - DEV Community
Cashing with service workers
Advanced caching with Service Workers
Complete Guide to Javascript Service Workers | SpeedyWordpress
Pagespeed: Google Tag Manager
Loading Third-Party JavaScript nystudio107 | Tags Gone Wild! Managing Tag Managers
Odlični izvori optimizacije:
Core Web Vitals Tips for WordPress by Tom Dupuis
Largest Contentful Paint In WordPress (Advanced Guide)