ADF Performance on Docker — Lighting Fast

ADF performance depends on server processing power. Sometimes ADF is blamed for poor performance, but in most of the cases real issue is related to poor server hardware, bad programming style or slow response from DB. Goal of this post is to show how fast ADF request could execute and give away couple of suggestions how to minimize ADF request time. This would apply to ADF application running on any environment, not only Docker. I’m using ADF Alta UI based list application with edit fragment. Rule number one — enable response compression. This will allow to transfer less data and obviously response will execute faster — shorter content download time. See in the screenshot below — JS file is compressed to 87 KB from original 411 KB. Initial page load in ADF generates around 3 MB of content (if this is very first access and static content is not cached yet on client side). With compression initial load of 3 MB will be around 300–400 KB. Thats a big difference. In this example ADF page opens in 1.2 seconds (this is equal to client side JS applications, if static content is downloaded on first access):

You can enable content response compression in WebLogic console (will be applied for all deployed Web apps). Go to domain configuration, Web Applications section:

Select checkbox to enable GZIP compression and provide a list of content types to be compressed:

Thats it — content compression is set.

When I navigate to edit fragment — request is executed in 305 ms. Thanks to fast Docker engine (running on Digital Ocean — Oracle ADF on Docker Container) and content response compression: 3.44 KB transferred for 14.49 KB original content:

Let’s try Save operation. I changed Hire Date attribute and then pressed Save button. This will trigger Commit operation in ADF, push data to ADF BC and then execute DML statement with commit in DB. All these steps are completed in 113 ms.

Don’t believe anyone who says ADF is slow. As you can see, ADF request is very fast fundamentally — but of course it can become slow, if you add a lot of data fetch and processing logic on top (blame yourself). Client side JS application would not run faster, if it would call backend REST service to save data. The only advantage of JS client side application in this case would be that it executes backend REST call asynchronously, while ADF calls requests in synchronous manner. However, it all depends — sometimes asynchronous calls are not suitable for business logic either. How come ADF BC call to DB completes so fast? For that we need to check Data Source Connection Delay Time on WLS. In Docker (Digital Ocean) environment it is ridiculously short (thats very good): 66 ms. Check same on your server (go to Data Source monitoring in WLS console), longer delay time means slower response from DB and slower ADF performance:

Navigation back to the list runs in 356 ms, with 197.96 KB of content compressed to 10.47 KB. This is very fast, 350 ms response time is something that user would not notice (almost equal to processing on client side):

To optimize ADF performance, make sure you are using ChangeEventPolicy = NONE for iterators in Page Definitions:

Originally published at andrejusb.blogspot.com on November 17, 2017.

TensorFlow Certified Developer | ML Expert | Founder https://katanaml.io and https://github.com/katanaml | Author at Manning Publications | Oracle Developer