Monday November 10th 2025
ExpressionEngine Tag Caching
I've recently had an interesting project, that required the checking of a 3rd party site to confirm that a user was allowed access to read certain pages. To do this, I wrote a simple Addon, with a single tag that performed the check, by requesting a specific url (basically exampledomain.tld/check/{magiccode}/{anothercode}). Upon success that page would return either a positive response or a negative one.
With my performance hat on, I started to think “Do I really want this running on every page.. potentially waiting for a 3rd party site to respond?” This sent me down a little rabbit hole of learning, this time about ExpressionEngine “Tag Caching”. What is this thing? Well the current ExpressionEngine docs say :
The Tag Caching system lets you cache the output of individual tags. This enables you to display sections of your pages completely dynamically while leaving others to display statically. By caching individual tags you will reduce the amount of scripting and server resources needed to display any given page while maintaining a fully dynamic presentation for things that require it.
Tag caching is time-based, meaning the cache is used for a user-definable time interval. When the time expires, the cache is automatically refreshed.
![]()
Tag Caching lets you take the strain off a server, this has to be a good thing!
What I wasn't sure about was how specific that cache could be, but a dig into the core code, let me to this part of the file “system/ee/legacy/libraries/Template.php” the key take away was seeing that it does cache with a key of the actual tag, and importantly the parameters as per:
// Check the tag cache file $this->cache_prefix = (isset($this->tag_data[$i]['params']['cache_prefix'])) ? $this->tag_data[$i]['params']['cache_prefix'] : ''; $cache_contents = $this->fetch_cache_file($this->tag_data[$i]['cfile'], 'tag', $this->tag_data[$i]['params']);
This means that if I set up the tag parameters, then they would be cached separately i.e. the following two are treated as two unique things to cache:
{exp:myAddon:myTag magicOne="123" magicTwo="345 cache="yes" refresh="10"} is cached apart from {exp:myAddon:myTag magicOne="987" magicTwo="654" cache="yes" refresh="10"}
Happy days!
Friday October 24th 2025
EEConf 2025 - London Edition
October 2025 saw the ExpressionEngine Conference come to London. This annual conference was held in Islington at the Business Design Centre.
I was fortunate to be chosen to be one of the speakers at the event. Definitely a good experience standing in front of a room of smart people and talking tech. My talk was titled “Supercharge Your ExpressionEngine Site: Performance Tips and Tricks”. The details of the talk will be in another article here in the near future. The last time I was “on stage” was way back before the pandemic, so it was great to get back up there!
Conference site: https://eeconf.com
![]()
It was a great honour and pleasure to speak at this event in front of so many smart and engaged people!
This gathering of the great and the good of the #eecms world was a great excuse to talk nerdy to a whole bunch of folks from the community. The quality and range of the talks was high, with subject ranging from running successful teams/agencies, the use of AI in coding (with some humorous and mixed results!) as well as plenty of ExpressionEngine specific content.
I left the conference feeling energised and positive for how the #eecms community is going from strength to strength.
What really makes a good conference alongside the talks and presentations is of course the people and conversations. Huge thanks to those involved in organising the event and the generous companies and people that sponsored the social side of things (yes Beer! 🍻 🍻 🍻)
