Enable compression in Tomcat
When page loading is too slow in a Semarchy xDM application, bad performance could be related to :
- SQL query processing time ( see Enable Logging in Semarchy xDM for reference on how to track and capture long-running queries )
- lack of horsepower and RAM on the application server ( check RAM and CPU usage on the host, verify connection pool sizing vs number of users, and tomcat memory settings )
- slow network
This article will focus on the latter.
Big files ?
When a semarchy form is loaded for the first time in the current session, the browser downloads a json file that describes the page layout. For complicated BoViews with multiple tabs and transitions, this json file could weigh 6 Mo or more. This can significantly increase page loading time if you have a low bandwidth and / or when the application server is far
Then what ?
The tomcat application server (as most application servers) can compress some of the resources used in a HTML page before transferring them over the network. There's a slight processing overhead to compress the files, but it's definitely worth it if network bandwidth is the main bottleneck.
There's a lot of structural redundancy in the average json file, making it a very good candidate for compression (you can expect more than 95 % reduction in size).
How can I monitor file tranfer duration ?
Google Chrome comes with a built-in troubleshooting tool (known as Developer Tools) that allows one to monitor the time taken to fetch files from the server to the client (the browser) :
- Press Ctrl + Shift + I to show / hide it.
- Make sure the Network tab is active / selected
- Use the clear button to clear the network log and make sure the "Disable Cache" property is ticked
- Refresh the page
- Locate the semRootEO file and check its size and transfer duration
- Select the file to see the current Content Type : it should be application/json
Step-by-step guide
- Open the server.xml file with your favorite text editor (it's typically found in the tomcat_root/conf folder)
- Locate the <Connector> element
Modify it by adding three compression-related properties as follows
compression="on" compressionMinSize="4096" compressableMimeType="text/html,application/json"
- Restart your tomcat server
- Start developer tools in chrome, go to network tab, select the semRootEO file, and check the header to make sure the changes were applied : the content encoding should now be gzip
Warning
Related articles