I have a very large, modular web application.
When it starts I can do things one of three ways:
A moderately long load time (about 60 seconds) to fetch all of the modules from the server (presented nicely with a progress indicator) before the user is shown the login screen. After the login screen the user never has to wait again.
A very short load time (3 seconds, no indicator) while only the essential core modules are loaded, the user is immediately shown the login screen, and modules are loaded on-demand as the user tries to access them for the first time (resulting in a loading screen of around 3-7 seconds per module)
A medium load time (around 20 seconds, with indicator) in which the essential core modules, and the 2/3 most frequently used modules are loaded), login screen is shown, and less frequently used modules are loaded on demand (again with a 3-7 second wait)
My first reaction is to let the user choose, but this actually seems like the sort of detail that most users won't care to change, or simply don't want to have to think about.
I can load modules at will, however during module loading the user interface becomes sluggish so I'm reluctant to keep loading modules in the background while the user is actively interacting with the application.
I'd love to hear which option you'd prefer as a user (and why), or even if there are other strategies that might deliver a better experience.