Pantheon Advanced Page Cache
For sites wanting fine-grained control over how their responses are represented in their edge cache, Pantheon Advanced Page Cache is the golden ticket. Here’s a high-level overview of how the plugin works: When a response is generated, the plugin uses surrogate keys based on WordPress’ main WP_Query object to “tag” the response with identifers for the data used in the response. See the “Adding Custom Keys” section for including your own surrogate keys. When WordPress data is modified, the plugin triggers a purge request for the data’s corresponding surrogate keys. Because of its surrogate key technology, Pantheon Advanced Page Cache empowers WordPress sites with a significantly more accurate cache purge mechanism, and generally higher cache hit rate. It even works with the WordPress REST API. Go forth and make awesome! And, once you’ve built something great, send us feature requests (or bug reports). How It Works Pantheon Advanced Page Cache makes heavy use of surrogate keys, which enable responses to be “tagged” with identifiers that can then later be used in purge requests. For instance, a home page response might include the Surrogate-Key header with these keys: Surrogate-Key: front home post-43 user-4 post-41 post-9 post-7 post-1 user-1 Similarly, a GET requests to /wp-json/wp/v2/posts might include the Surrogate-Key header with these keys: Surrogate-Key: rest-post-collection rest-post-43 rest-post-43 rest-post-9 rest-post-7 rest-post-1 Because cached responses include metadata describing the data therein, surrogate keys enable more flexible purging behavior like: When a post is updated, clear the cache for the post’s URL, the homepage, any index view the post appears on, and any REST API endpoints the post is present in. When an author changes their name, clear the cache for the author’s archive and any post they’ve authored. There is a limit to the number of surrogate keys in a response, so we’ve optimized them based on a user’s expectation of a normal WordPress site. See the “Emitted Keys” section for full details on which keys are included, and the “Adding Custom Keys” section following for information on how to add your own. Adding Custom Keys By default, Pantheon Advanced Page Cache generates surrogate keys based on an interpretation of the main WP_Query query object. Because WordPress sends headers before the page is rendered, you need to use the pantheon_wp_main_query_surrogate_keys filter to include additional surrogate keys for any data present on the page. For example, to include surrogate keys for a sidebar rendered on the homepage, you can filter the keys using the is_home() template tag: /** * Add surrogate key for the featured content sidebar rendered on the homepage. */ add_filter( 'pantheon_wp_main_query_surrogate_keys', function( $keys ){ if ( is_home() ) { $keys[] = 'sidebar-home-featured'; } return $keys; }); Then, when sidebars are updated, you can use the pantheon_wp_clear_edge_keys() helper function to emit a purge event specific to the surrogate key: /** * Trigger a purge event for the featured content sidebar when widgets are updated. */ add_action( 'update_option_sidebars_widgets', function() { pantheon_wp_clear_edge_keys( array( 'sidebar-home-featured' ) ); }); Similarly, to include surrogate keys for posts queried on the homepage, you can pre-fetch the posts before the page is rendered: /** * An example of pre-fetching a WP_Query to tag the * response with queried data. You'd use `papcx_wp_query()` * a second time within your template to use the data. */ add_filter( 'pantheon_wp_main_query_surrogate_keys', function( $keys ) { if ( is_home() ) { $query = papcx_wp_query( array( 'post_type' => 'page', ) ); foreach( $query->posts as $post ) { $keys[] = 'post-' . $post->ID; } } return $keys; }); /** * Register a 'papc-non-persistent' cache group to cache data * in a non-persistent manner. We only want data in this group * to be cached within the page request. */ add_action( 'init', function(){ wp_cache_add_non_persistent_groups( array( 'papc-non-persistent' ) ); }); /** * Helper function to instantiate a WP_Query object only * once per page request. * * @param array $args Arguments to pass to WP_Query. * @return WP_Query */ function papcx_wp_query( $args = array() ) { $cache_key = md5( serialize( $args ) ); // WP_Query object will be in cache the second time we use the function. $cache_value = wp_cache_get( $cache_key, 'papc-non-persistent' ); if ( false !== $cache_value ) { return $cache_value; } $query = new WP_Query( $args ); wp_cache_set( $cache_key, $query, 'papc-non-persistent' ); return $query; } Because Pantheon Advanced Page Cache already handles WordPress post purge events, there’s no additional call to pantheon_wp_clear_edge_keys(). Lastly, the pantheon_wp_rest_api_surrogate_keys filter lets you filter surrogate keys present in a REST API response. Additional purging by path When a post is published for the first time, the permalink’s path is also purged even if it has no matching keys. This can be further filtered with the pantheon_clear_post_path filter. add_action('pantheon_clear_post_path', function($paths) { // Add or remove paths from $paths return $paths }, 10, 3); Need a bit more power? In addition to pantheon_wp_clear_edge_keys(), there are two additional helper functions you can use: pantheon_wp_clear_edge_paths( $paths = array() ) – Purge cache for one or more paths. pantheon_wp_clear_edge_all() – Warning! With great power comes great responsibility. Purge the entire cache, but do so wisely. Ignoring Specific Post Types By default, Pantheon Advanced Page Cache is pretty aggressive in how it clears its surrogate keys. Specifically, any time wp_insert_post is called (which can include any time a post of any type is added or updated, even private post types), it will purge a variety of keys including home, front, 404 and feed. To bypass or override this behavior, since 1.5.0 we have a filter allowing an array of post types to ignore to be passed before those caches are purged. By default, the revision post type is ignored, but others can be added: /** * Add a custom post type to the ignored post types. * * @param array $ignored_post_types The array of ignored post types. * @return array */ function filter_ignored_posts( $ignored_post_types ) { $ignored_post_types[] = 'my-post-type'; // Ignore my-post-type from cache purges. return $ignored_post_types; } add_filter( 'pantheon_purge_post_type_ignored', 'filter_ignored_posts' ); This will prevent the cache from being purged if the given post type is updated. Setting the Cache Max Age with a filter The cache max age setting is controlled by the Pantheon Page Cache admin page. As of 2.0.0, there are three cache age options by default — 1 week, 1 month, 1 year. Pantheon Advanced Page Cache automatically purges the cache of updated and related posts and pages, but you might want to override the cache max age value and set it programmatically. In this case, you can use the pantheon_cache_default_max_age filter added in Pantheon MU plugin 1.4.0+. For example: add_filter( 'pantheon_cache_default_max_age', function() { return 10 * DAY_IN_SECONDS; } ); When the cache max age is filtered in this way, the admin option is disabled and a notice is displayed. Updating the cache max age based on nonces Nonces created on the front-end, often used to secure forms and other data, have a lifetime, and if the cache max age is longer than the nonce lifetime, the nonce may expire before the cache does. To avoid this, you can use the pantheon_cache_nonce_lifetime action to set the pantheon_cache_default_max_age to less than the nonce lifetime. For example: do_action( 'pantheon_cache_nonce_lifetime' ); It’s important to wrap your do_action in the appropriate conditionals to ensure that the action is only called when necessary and not filtering the cache max age in cases when it’s not necessary. This might mean only running on certain pages or in certain contexts in your code. WP-CLI Commands This plugin implements a variety of WP-CLI commands. All commands are grouped into the wp pantheon cache namespace. $ wp help pantheon cache NAME wp pantheon cache DESCRIPTION Manage the Pantheon Advanced Page Cache. SYNOPSIS wp pantheon cache SUBCOMMANDS purge-all Purge the entire page cache. purge-key Purge one or more surrogate keys from cache. purge-path Purge one or more paths from cache. Use wp help pantheon cache to learn more about each command. Debugging By default, Pantheon’s infrastructure strips out the Surrogate-Key response header before responses are served to clients. The contents of this header can be viewed as Surrogate-Key-Raw by adding on a debugging header to the request. A direct way of inspecting headers is with curl -I. This command will make a request and show just the response headers. Adding -H "Pantheon-Debug:1" will result in Surrogate-Key-Raw being included in the response headers. The complete command looks like this: curl -IH "Pantheon-Debug:1" https://scalewp.io/ Piping to grep will filter the output down to just the Surrogate-Key-Raw header: curl -IH "Pantheon-Debug:1" https://scalewp.io/ | grep -i Surrogate-Key-Raw Tada! Emitted Keys and Purge Events Emitted Keys on Traditional Views Home / Emits surrogate keys: home, front, post- (all posts in main query) Single post /2016/10/14/surrogate-keys/ Emits surrogate keys: single, post- , post-user- , post-term- (all terms assigned to post) Author archive /author/pantheon/ Emits surrogate keys: archive, user- , post- (all posts in main query) Term archive /tag/cdn/ Emits surrogate keys: archive, term- , post- (all posts in main query) Day archive /2016/10/14/ Emits surrogate keys: archive, date, post- (all posts in main query) Month archive /2016/10/ Emits surrogate keys: archive, date, post- (all posts in main query) Year archive /2016/ Emits surrogate keys: archive, date, post- (all posts in main query) Search /?s= Emits surrogate keys: search, either search-results or search-no-results, post- (all posts in main query) Not found (404) Emits surrogate keys: 404 Emitted Keys on REST API Endpoints Posts /wp-json/wp/v2/posts emits surrogate keys: rest-post-collection, rest-post- /wp-json/wp/v2/posts/ emits surrogate keys: rest-post- Pages /wp-json/wp/v2/pages emits surrogate keys: rest-page-collection, rest-post- /wp-json/wp/v2/pages/ emits surrogate keys: rest-post- Categories /wp-json/wp/v2/categories emits surrogate keys: rest-category-collection, rest-term- /wp-json/wp/v2/categories/ emits surrogate keys: rest-term- Tags /wp-json/wp/v2/tags emits surrogate keys: rest-post_tag-collection, rest-term- /wp-json/wp/v2/tags/ emits surrogate keys: rest-term- Comments /wp-json/wp/v2/comments emits surrogate keys: rest-comment-collection, rest-comment-post- , rest-comment- /wp-json/wp/v2/comments/ emits surrogate keys: rest-comment-post- , rest-comment- Users /wp-json/wp/v2/users emits surrogate keys: rest-user-collection, rest-user- /wp-json/wp/v2/users/ emits surrogate keys: rest-user- Settings /wp-json/wp/v2/settings emits surrogate keys: rest-setting- Purge Events Different WordPress actions cause different surrogate keys to be purged, documented here. wp_insert_post / transition_post_status / before_delete_post / delete_attachment Purges surrogate keys: home, front, 404, post- , user- , term- , rest- -collection, rest-comment-post- Affected views: homepage, single post, any page with 404 header, any archive where post displays, author archive, term archive, REST API collection and resource endpoints clean_post_cache Purges surrogate keys: post- , rest-post- Affected views: single post, REST API resource endpoint created_term / edited_term / delete_term Purges surrogate keys: term- , post-term- , rest- -collection Affected views: term archive, any post where the term is assigned, REST API collection and resource endpoints clean_term_cache Purges surrogate keys: term- , rest-term- Affected views: term archive, REST API resource endpoint wp_insert_comment / transition_comment_status Purges surrogate keys: rest-comment-collection, rest-comment- Affected views: REST API collection and resource endpoints clean_comment_cache Purges surrogate keys: rest-comment- Affected views: REST API resource endpoint clean_user_cache Purges surrogate keys: user- , rest-user- Affected views: author archive, any post where the user is the author updated_option Purges surrogate keys: rest-setting- Affected views: REST API resource endpoint Surrogate Keys for taxonomy terms Setting surrogate keys for posts with large numbers of taxonomies (such as WooCommerce products with a large number of global attributes) can suffer from slower queries. Surrogate keys can be skipped for ‘product’ post types’ taxonomy terms (or any other criteria you see fit) with the following filter: function custom_should_add_terms($should_add_terms, $wp_query) { if ( $wp_query->is_singular( 'product' ) ) { return false; } return $should_add_terms; } add_filter('pantheon_should_add_terms', 'custom_should_add_terms', 10, 2); Other Filters pantheon_apc_disable_admin_notices Since 2.0.0, Pantheon Advanced Page Cache displays a number of admin notices about your current cache max age value. You can disable these notices with the pantheon_apc_disable_admin_notices filter. add_filter( 'pantheon_apc_disable_admin_notices', '__return_true' ); Alternately, the function callback is passed into the pantheon_apc_disable_admin_notices filter, allowing you to specify precisely which notice to disable, for example: add_filter( 'pantheon_apc_disable_admin_notices', function( $disable_notices, $callback ) { if ( $callback === '\\Pantheon_Advanced_Page_Cache\\Admin_Interface\\admin_notice_maybe_recommend_higher_max_age' ) { return true; } return $disable_notices; }, 10, 2 ); The above example would disable only the admin notice recommending a higher cache max age. Plugin Integrations Pantheon Advanced Page Cache integrates with WordPress plugins, including: WPGraphQL Contributing See CONTRIBUTING.md for information on contributing.
Top keywords
- keys72×3.33%
- cache62×2.87%
- surrogate54×2.50%
- surrogate keys49×2.27%
- wp48×2.22%
- post37×1.71%
- pantheon35×1.62%
- query27×1.25%
- emits22×1.02%
- emits surrogate22×1.02%
- emits surrogate keys22×1.02%
- page21×0.97%
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance
MORE THAN A CACHING PLUGIN WP-Optimize is trusted by more than 1 million WordPress website owners to boost performance and reduce page load times to improve your site’s user experiences and SERP rankings in Google. It does this in four clever ways: 1. It caches your site Caching is the process of storing a temporary HTML version of your site on the server so it can be retrieved more quickly for the user. It’s a sure-fire way to ensure web pages load at lightning-fast speed. Turn it on in just one click. 2. It compresses images Large images can really impact page speed load times. WP-Optimize makes it easy to identify and compress images to your preferred lossy / lossless settings in a couple of clicks. 3. It cleans the database Your WordPress database stores everything that you need, plus some things that you don’t. WP-Optimize cleans and optimizes the database to speed up your site and save server resources. 4. It minifies On top of its three main features, WP-Optimize Cache also has the more advanced minification feature. Together with caching, minification dramatically improves performance and page speed load time. 1. CACHE YOUR SITE Turn on caching in just one click: WP-Optimize automatically and optimally configures itself for your WordPress site. Turn it on in one-click or refine its settings if you prefer. More cache features: Cache preloading: This feature emulates a visit to your site, meaning cached files are served straight away, speeding up your site from the very first visit. GZIP Compression: When the server isn’t configured to do so, WP-Optimize delivers HTML, CSS and JS files to the user’s browser as smaller, compressed files, reducing the size of pages and style sheets by up to 90%! Preload key requests: Recommended by Google to improve page speed times. Critical resources (things like font files) get loaded first, so the page loads much faster [Premium]. Use cache settings to: Serve cached content to logged in users: Turn this on if content stays the same for logged in users (or turn on and exclude URLs where content does change e.g. my account areas). Exclude content from cache: Exclude by URL, conditional tags, browser agent strings or list cookies that should prevent caching when set (advanced user settings). Deliver device-specific cache: Serve separate cache files to desktop and mobile devices . This ensures that responsive features e.g. desktop and mobile menus are cached separately and served correctly. User per role cache: Useful if your website delivers different content to different user roles. e.g. an e-commerce site that displays different content to resellers or consumers [Premium]. User specific cache: Serves separate cache files to individual users. Useful for websites with personalised content e.g. Learning management systems [Premium]. Cache purging permissions: Select which user roles are allowed to purge the cache e.g. admin only or perhaps a ‘teacher’ role in an LMS setting only [Premium]. 2. COMPRESS IMAGES Lossy or lossless compression options: Choose between maximum space saving, best image quality or somewhere in-between. WebP conversion: Recommended by Google, WebP can achieve up to 34% smaller file sizes compared to JPEG and up to 26% compared to PNG. Auto-compress: Check a box and every new image you upload will automatically be compressed to your preferred lossy / lossless settings. Bulk compression: Compress every existing image on your site with the press of a button. Restore original: Gone too far? Revert images back to their original in one click. Retain EXIF image data: Check a box to retain EXIF image data during compression. Lazy Load: Webpages load much faster by loading web parts gradually, when they’re needed vs simultaneous loading of everything, all at once [Premium]. Delete orphaned images: Identify and delete unused images from your WordPress website, saving disk space [Premium]. Delete unused image sizes: WordPress creates multiple sizes for every uploaded image causing the uploads folder to become bloated. Scan for image sizes not in use and remove them to save further disk space [Premium]. 3. CLEAN AND OPTIMIZE THE DATABASE Cleans-up database tables, post revisions, auto draft posts, trashed posts, spam, trashed comments and more. Choose what to optimize or it’s one click to clean out the lot. Schedule clean-ups: So you can set and forget. Choose from daily, weekly, fortnightly or monthly. Flexible clean-up schedules: You may wish to optimize database tables more frequently than you remove unapproved comments (for example). Choose the specific time and day when tasks should run [Premium]. Retain a set number of weeks’ data during clean-ups: Just in case you need to retrieve something. Back up before clean-ups: If you delete something you shouldn’t, restore it in a couple of clicks with UpdraftPlus. Power tweak – Turbo boost for WooCommerce: Unique to WP-Optimize, this power tweak boosts performance by replacing a slow query in WooCommerce with two much more efficient queries. E-commerce sites transacting high numbers of orders stand to gain here [Premium]. Power tweak – Boost performance by indexing the postmeta table: This unique power tweak works by allowing the WordPress postmeta table to be indexed, improving performance [Premium]. 4. MINIFY AND COMBINE HTML, CSS AND JAVASCRIPT Minify in just one click: Minifies HTML, JavaScript and CSS. Toggle on or off or customise each one under ‘settings’. Customise minification: Minify only (removing unnecessary code e.g line breaks and white spacing) or minify and merge. Apply the same or different settings to HTML, CSS and JavaScript. Asynchronous loading: Choose non-critical CSS and JavaScript files to load in the background and independently of other resources e.g. analytics or pixel scripts. Loading asynchronously eliminates render blocking and improves page speed. Exclude files from being minified: Specify CSS and JavaScript files to exclude from minification. Optimize fonts: Optimize Font Awesome and Google Fonts. Inline the font files, inherit from CSS settings or load CSS / Javascript asynchronously instead. Preload assets: WP-Optimize visits each web page on your site so the code is minified and preloaded for real life users, right from their very first visit. Preload key requests: Recommended by Google to improve page speed times. Critical resources (things like font files) get loaded first, so the page loads much faster. WHY WP-OPTIMIZE? It’s brought to you by TeamUpdraft, the team behind the world’s most trusted backup, migration and restoration plugin. It’s easy to use. It packs a punch for a free plugin. WP-Optimize brings the best cache and optimization technology together into one single, seamless plugin to make your WordPress site fast, lean and efficient. PREMIUM FEATURES AT A GLANCE Our free version of WP-Optimize Cache is great, but we also have an even more powerful Premium version with extra features that offer the ultimate in freedom and flexibility: Multisite Support: extends database optimisations so they function for multiple WordPress sites at a time. If you manage more than one website, you will need WP-Optimize Cache Premium. Flexibility and Control: gives you the power to optimize select individual tables or a particular combination of tables on one or more WordPress websites, rather than having to optimize all database tables. Deleting unused and unwanted images: removes orphaned images from your WordPress site, plus images of a certain, pre-defined size. Sophisticated Scheduling: offers a wide range of options for scheduling automatic optimization. Specify an exact time and run clean-ups daily, weekly, fortnightly or monthly and perform any number of additional once off optimizations. Seamless Graphical User Interface: for superb clarity in scheduling and managing of multi-site optimizations. WP-CLI support: provides a way to manage optimizations from command-line interface if you have lots of sites Lazy Loading: load only the images and part of a web-page when it is visible to the user so they can see something very quickly. Optimization Preview: gives users the ability to preview, select and remove data and records available for optimization from the database. Preload key requests: preload assets such as web fonts and icon fonts, as recommended by Google PageSpeed Insights. Premium support – caching is one of the most complex things you can do for a website, so premium support offers you peace of mind there’s someone to talk quickly to if you need any technical answers or help configuring the optimizations of cache settings for your website. Translations Translators are welcome to contribute to the plugin. Please use the WordPress translation website.