This repository contains a collection of experiments in a take-home lab format designed to highlight the performance impact of some AEM best practices. The content is intended for intermediate to advanced AEM developers and customizers.
The goal of these experiments is to demonstrate the impact of best practices adoption in Adobe Experience Manager (AEM).
This repo does not attempt to prescribe a one-size-fits-all solution to optimize AEM performance. Due to the myriad use cases that AEM supports, it would be impossible to do so. Instead, pick and choose concepts from the below experiments and try them out on your project.
You will need the following SDKs, tools, and apps installed to work through the experiments:
You will also need a local AEM author setup:
- AEM 6.5 author instance running on
:4502
- Ideally, with the latest Service Pack installed
Under no circumstances should this code by installed on a production instance. It is for illustration purposes only and should be removed once the user has completed their investigation.
In this experiment, we examine the before and after effects of creating a custom Lucene property index.
⇨ Performance gains of a Lucene property index
In this experiment, we'll take a vague search query and see the performance boost achieved by narrowing its search criteria.
⇨ Performance gains of a simple query refinement
In this experiment, we use Query Builder's p.guessTotal to improve query performance.
⇨ Performance gains for large result sets
In this experiment, we consider what customizers should do after their queries are optimized and they find their search still takes a long time and returns a large set.
In this experiment, we consider how often the JCR session should be saved when performing many modifications to it. How often should a 'save' be done? After every write? Every 10 writes? Only at the end? Try out the experiment and determine for yourself.
Spoiler: Less is more!
⇨ Performance Impact of Changing JCR Session Save Frequency
Contributions are welcomed! Read the Contributing Guide for more information.
This project is licensed under the Apache V2 License. See LICENSE for more information.