This article discusses strategies and best practices you can implement to reduce bottlenecks and optimize the performance of your AEM Forms deployment.
You can configure and control the caching strategy for AEM Forms using the Mobile Forms Configurations component in AEM Web Configuration Console at http://[server]:[port]/system/console/configMgr.
The available options for caching are as follows:
- None: Enforces not to cache any artifact. This will, in practice, slows the performance and requires high memory availability due to the absence of cache.
- Conservative: Dictates to cache only those intermediate artifacts that are generated before rendering the form, such as a template containing inline fragments and images.
- Aggressive: Enforces to cache almost everything that can be cached, including rendered HTML content besides all the artifacts from the Conservative caching level. It results in the best performance but also consumes more memory for storing cached artifacts. Aggressive caching strategy means you will get constant time performance in rendering a form as the rendered content is cached.
The default cache settings for AEM Forms may not be good enough to achieve optimal performance. Therefore, it is recommended to use the following settings:
- Cache Strategy: Aggressive
- Cache size (in terms of number of forms): As required
- Max Object Size: As required
If you use AEM Dispatcher to cache adaptive forms, it also caches adaptive form which contains forms with pre-filled data. If such forms are served from AEM Dispatcher cache, it may lead to serving pre-filled or stale data to the users. So, use AEM Dispatcher to cache adaptive forms which do not use pre-filled data. Moreover, a dispatcher cache does not auto-invalidate cached fragments. So, do not use it to cache form fragments. For such forms and fragments, use Adaptive forms cache.
For optimal performance, it is recomended to use the following JVM init arguments to configure the Java heap and PermGen.
set CQ_JVM_OPTS=%CQ_JVM_OPTS% -Xms8192m set CQ_JVM_OPTS=%CQ_JVM_OPTS% -Xmx8192m set CQ_JVM_OPTS=%CQ_JVM_OPTS% -XX:PermSize=256m set CQ_JVM_OPTS=%CQ_JVM_OPTS% -XX:MaxPermSize=1024m
Note: The recommended settings are for Windows 2008 R2 8 Core and Oracle HotSpot 1.7 (64-bit) JDK and should be scaled up or down as per your system configuration.
Adaptive forms and HTML5 forms render in HTML5 format. The resultant output could be large depending on factors like the form size and images in the form. To optimize the data transfer, the recommended approach is to compress the HTML response using the web server from which the request is being served. This approach reduces the response size, network traffic, and the time required to stream data between server and client machines.
For example, perform the following steps to enable compression on Apache Web Server 2.0 32-bit with JBoss:
Note: The following instructions do not apply to any server other than the Apache Web Server 2.0 32-bit. For steps specific to any other server, see the corresponding product documentation.
Following steps demonstrates changes required to enable compression with Apache Web Server
Obtain the Apache web server software applicable to your operating system
- Windows: download the Apache web server from the Apache HTTP Server Project site.
- Solaris 64-bit: download the Apache web server from the Sunfreeware for Solaris Website.
- Linux: the Apache web server is preinstalled on a Linux system.
Apache can communicate to CRX using the HTTP protocol. The configurations are for optimization using HTTP.
Enable Compression. Add following configuration in APACHE_HOME/conf/httpd.conf configuration file.
For HTML5 forms
<Location /content/xfaforms> <IfModule mod_deflate.c> SetOutputFilter DEFLATE #Don’t compress SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #Dealing with proxy servers <IfModule mod_headers.c> Header append Vary User-Agent </IfModule> </IfModule> </Location>
<Location /content/forms/af> <IfModule mod_deflate.c> SetOutputFilter DEFLATE #Don’t compress SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #Dealing with proxy servers <IfModule mod_headers.c> Header append Vary User-Agent </IfModule> </IfModule> </Location>