-
Notifications
You must be signed in to change notification settings - Fork 642
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Add InvalidateElementCachesEvent
that fires when element TagDependency caches are invalidated
#11617
Merged
brandonkelly
merged 22 commits into
craftcms:4.2
from
nystudio107:feature/tag-dependency-invalidate-events
Jul 21, 2022
Merged
feat: Add InvalidateElementCachesEvent
that fires when element TagDependency caches are invalidated
#11617
brandonkelly
merged 22 commits into
craftcms:4.2
from
nystudio107:feature/tag-dependency-invalidate-events
Jul 21, 2022
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ci skip]
[ci skip]
[ci skip]
[ci skip]
[ci skip]
[ci skip]
[ci skip]
[ci skip]
# Conflicts: # src/services/Deprecator.php # src/services/TemplateCaches.php # src/web/ErrorHandler.php
New Crowdin updates
…hpdocs Fix @param types in `Message` methods
…ependency caches are invalidated
This was referenced Jul 18, 2022
4.2.0 is out now with that event ✨ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR adds an
InvalidateElementCachesEvent
that is triggered by three methods in theElements
service:invalidateAllCaches()
invalidateCachesForElementType()
invalidateCachesForElement()
These methods are bottleneck methods that are called from a wide variety of places in the codebase whenever an element's caches need to be invalidated.
The event has a
$tags
property that is an array ofTagDependency
tag names that are being invalidated, so the listener can take an action when the caches are invalidated. Otherwise, there is no way to know when an Element's caches have been invalidated because theTagDependency
information is stored appended to the cached data via whatever the current caching method is.Throwing these events will greatly simplify implementing a variety of middleware that needs to know when an element's caches have been invalidated. Example usage:
Plugins like Blitz, Upper, and others that deal with cache invalidation would benefit from this, rather than having to roll their own solution.
These events are intentionally agnostic; you'd layer something useful on top of them. A common use-case would be to use these events in conjunction with something like:
...so that you can collect the element caches on a given page, and when those events fire, do whatever you need to do to invalidate them.
In my case, I will be using a custom db table to store the rendering page's URI in conjunction with a JSON column type that has the array of TagDependency tag names, so whenever a tag is invalidated, I can do a reverse lookup to find all of the affected URIs.