origam.com

Performance Improvement for TextFile Work Queue Screen

At the moment text file work queue screen is not lazily loaded. It also loads all content from all files resulting in a long loading times and a huge amount of traffic.


The work queue screen should be lazily loaded and the file contents should be delivered only for the selected record.

The reason why work queue screens are not lazy loaded is that there is an insufficient support in the model.

Currently lazy loading implemented in menus requires a List Data Structure + List Method in order to load the master list and the main data structure + single record load method in order to load the current record.

The whole definition for work queue screens comes from the Work Queue Class.

Let’s have a look at the TextFile queue class definition:

As you can see, there is only a support for loading the whole thing. As queues are always just a single entity, we are very close. We can use the same data structure for loading the list as for loading the current record. We have the list method WorkQueueStructureUserListMethod.

But we are missing the single record load method.

Fortunately each work queue data structure is required to support the following methods, identified by their names in ORIGAM code.

image

So we could actually use the GetById method for loading the single record. Like here:

Please note we can get into troubles when multiple checkboxes option is selected on an action button. If the list is very long (which I suppose was the reason for creating this ticket), checking all records could kill the app. We should maybe introduce some limits.

There’s still issue with splitting file content delivery. At the moment it is part of the main load.

It could be done the way that the frontend would only query the columns being displayed in the grid (+ primary key). A general optimisation. Not sure if it wouldn’t have some other consequences.

But you should also consider that row states anyway load each record in the backend. We could skip checking for row states if there are no rules whatsoever (security or formatting). Not even requesting them from the frontend.