It's now possible to easily enable asynchronous execution and caching for panels, wiki UI extensions and wiki macros.
The following fields have been added:
- Asynchronous rendering (async_enabled): a boolean indicating if the element should be executed asynchronously. Disabled by default.
- Cached (async_cached): a boolean indicating if the result of the execution of the element should be cached. Disabled by default.
- Context elements (async_context): the context information required for the execution of the element (current user, current document, etc.). It's also used to generate the cache key.
A org.xwiki.rendering.async.AsyncContext Java class and corresponding $services.async script service have been introduced to control:
- if the asynchronous execution should be enabled/disabled in the current context (in which case any following execution of panels will be synchronous no matter how it was configured in the first place for example).
- a set of methods to help register a set of entities and components which should lead to cache invalidation if they are modified, for the current asynchronous execution.
- a way to register some custom resources to remember. Their cached results will be reinjected later (for example it's used to remember the skin extensions required by a cached element). One can then implement org.xwiki.rendering.asyncAsyncContextHandler to restore them when using the cached content.