In the previous recipes, all lists of records being managed by the page or related to the record being managed have been loaded synchronously; that is, the records have been retrieved by the controller and displayed when the page is initially loaded. In the event that the query retrieving the records is complex (and thus, time consuming), or where the payload for the records is large due to the volume of records or the size of each individual record, this can result in a delay before the page is loaded. A delay of this nature is invariably a negative experience for the user, often leading them to conclude that the application has failed in some way.
In this recipe, we will create a Visualforce page that loads an account record prior to rendering the page for the first time, and then loads the opportunity records associated with the account asynchronously. A spinning GIF is displayed to the user indicating that the asynchronous load is taking place.