Enhancing Performance and User Experience

A concern before launching our application is that we improve the user experience with regards to Performance. Mostly I am referring to "code" level ways of fixing performance, but the key thing to bear in mind is that we most of all care about changes that a user can see. There are also changes that can be made to help user experience in other ways (such as improving a workflow ... less buttons, simpler interactions ... which this document will talk less about)

Some areas where application architecture and web limitations affect our performance are:

  • Downloading application
    • by running off GitHub, it can sometimes take 10-30 seconds to download and launch
    • this could be even worse when running at JSS, with a slower net connection
  • First launch of application
    • Even after downloading, still need to query certain values on first launch (e.g. the UUIDs of the OpenMRS concepts on the specific server being used). This takes some seconds to complete
  • Login time and frequency
    • how often should user need to re-login? is it quick to each time
  • Responsiveness in application
    • when querying back-end resources like patient list, sometimes must wait a few seconds to make REST calls
    • currently there are sometimes many REST calls, but we in the future could instead change the REST resources to bundle several calls together to minimize number of GETs and POSTs

Note that our application is currently planned to be run over an intranet, with backups and eventually cloud-based sync'ing of data.

Some ways we can improve these are

  • (Download) Package Mobile/Tablet application natively using PhoneGap (for Android, iOS)
  • (Download) Possible to package our desktop application? (Adobe Air, Chrome App)
  • (Download) Minify our JS
  • (Download) Combine JS into less files
  • (Download) Less graphics files... can we combine into one graphics file via a CSS Sprite Builder?
  • (First launch) Make queries for concepts more efficient .. less REST calls, or one that retrieves all needed concepts?
  • (Responsiveness) bundle REST calls. 
  • (Responsiveness) do REST calls in background threads , before you arrive at a page. For example, Facebook pre-loads several pictures ahead of the picture that you're currently looking at, so that if you switch to the next picture, you won't perceive it as loading.... it has already loaded in the background.