NOTICE: This plugin has been deprecated and is no longer in active development. Please download the latest version managed by Lewis Communications.
Presto is a static file extension for the native Craft cache. It works alongside standard Twig {% cache %}
tag pairs and includes cache-busting features. Just like standard caching, Presto is automatic. Simply install, update your layouts, and then the cache will bust automatically as you create, update, or delete content.
Turn off element query caching in your general config file. This will stop the DeleteStaleTemplateCaches
task from running in the admin. Since Presto busts the entire cache when a new element is saved, element query caching is not necessary.
'cacheElementQueries' => false
Presto lets Craft do the heavy lifting of calculating the elements within the template. As a result, all you need to do in your templates is pass the cache key returned from craft.presto.cache
to the native cache tag pair. Presto will return a cache key that includes the host, group (if one is set), and path.
Note that the entirety of your template logic must be wrapped by the cache
tags. In addition, it is recommended that you add the globally
tag so that Craft does not overload the cache (i.e. query string requests).
{% cache globally using key craft.presto.cache %}
{# Template Logic #}
{% endcache %}
{% craft.presto.cache({
group: 'pjax',
static: false
}) %}
Parameter | Type | Description |
---|---|---|
group | string | When set, the requested page will write into a sub-folder within the top-level cache directory. This is useful for pjax implementations where you load a separate template. |
static | boolean | Setting to false will disable static caching for the request and fall back to native caching logic. The cache key will still be returned, but a static file won't be written. |
Your host needs to check for matching static files before Craft handles the request. If the file exists, it's served statically. This block should typically be set immediately preceding the primary Craft "index.php" rewrite. Use these examples as a general guideline, your implementation may vary.
# Check Presto cache
RewriteCond %{REQUEST_FILENAME} !\.(css|eot|gif|ico|jpe?g|otf|png|svg|ttf|webp|woff2?)$ [NC]
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cache/%{HTTP_HOST}/presto%{REQUEST_URI}/index.html -f
RewriteRule .* /cache/%{HTTP_HOST}/presto%{REQUEST_URI}/index.html [L,E=nocache:1]]
# Craft rewrite here
If you add a cache group, you'll need to add additional configuration. Below is an example of a pjax implementation:
RewriteCond %{REQUEST_FILENAME} !\.(css|eot|gif|ico|jpe?g|otf|png|svg|ttf|webp|woff2?)$ [NC]
RewriteCond %{HTTP:X-PJAX} true
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cache/%{HTTP_HOST}/presto/pjax%{REQUEST_URI}/index.html -f
RewriteRule .* /cache/%{HTTP_HOST}/presto/pjax%{REQUEST_URI}/index.html [L,E=nocache:1]]
If you use a multi-environment config, set an arbitrary cache variable in your general config. Override this variable on environments where you don't want static caching (e.g. local development).
General Config Variable
`cacheEnabled` => true
Cache Tag
{% cache globally using key craft.presto.cache if conf.cacheEnabled is defined and conf.cacheEnabled %}
{# Template Logic #}
{% endcache %}
When using Presto the for
, until
, if
, and unless
parameters won't be respected on each request once the static html file is created. To disable the cache on individual templates, set a variable on the main cache tag. Override that variable on each template where you don't want static caching.
Cache Tag
{% cache globally using key craft.presto.cache if cacheEnabled is defined ? cacheEnabled : true %}
<!doctype html>
<html>
<body>
{{ block('content') }}
</body>
</html>
{% endcache %}
Cache Template Override
{% extends '[layout-template-path]' %}
{# Disable caching on this page #}
{% set cacheEnabled = false %}
{% block content %}
{# page content #}
{% endblock %}
Presto resolves subdomain hosts automatically. Static html files are created inside a directory named after the requested host (i.e. coolwebsite.com, sub.coolwebsite.com). An additional directory called "presto" is created inside each host directory to avoid .htaccess filename conflicts. See below for an example cache file directory structure:
- cache
- coolwebsite.com
- presto
- index.html
- blog
- index.html
To purge the cache, navigate to the Presto plugin settings page (Settings > Presto) and click "Purge Cache" (immediate) or "Schedule Purge" (cron).
Note: The Cron purge method does not clear the template cache. Remember to purge the template cache before you schedule a purge.
Presto provides two purge methods: immediate and cron.
By default, Presto will purge the static cache and all related Craft template caches immediately. This only occurs in the server instance where the cache was cleared.
If you run Presto in an environment that spins up multiple server instances, set the purgeMethod config to "cron". Set up a cron job on each server instance that runs the presto check
console command. The following example will run it every 10 minutes.
*/10 * * * * /var/www/craft/app/etc/console/yiic presto check
If an entry exists in the CMS but is not displayed on the site (e.g. status is disabled, entry is archived, etc.), enabling the entry will not clear any caches. Presto only clears related entries that are displayed on the site. In order to display your newly enabled entry, purge the entire cache.
Create a "presto.php" in the config folder (craft > config) file and configure as needed.
Parameter | Type | Default | Description |
---|---|---|---|
purgeMethod | string | immediate |
Changes how cache busting should be handled: immediately when Craft busts its cache, or via a cron job. Options: immediate and cron . |
rootPath | string | $_SERVER['DOCUMENT_ROOT'] |
Root public directory |
- Move the "presto" directory to "craft/plugins".
- In the Craft admin, navigate to the Plugin section within Settings.
- Click the Install button on the Presto entry.
- Optionally change the default cache path in the Presto settings.
- Note that you should exclude cache directory content from version control.
- Display a list of cached pages in the admin
- Add ability to clear individual cached pages in the admin
- Warm cache after an entry is saved or created
Copyright 2017 Lewis Communications, LLC. Licensed under the Apache License, Version 2.0.