I'm not sure if 10 seconds is really a flag considering when the app is loaded it has to dynamically build 19 unique lists, of which it does consecutively. One query, one build; One query, one build and so on. I used to throw all of the requests at the server at the same time, but it didn't like that.
The lists are generated from tables with only the absolute necessary columns to support their creation. As well, all other layers in the application only expose the bare minimum columns.
The important part of the code is attached with server names commented out. To build the application alone it takes a little over 1,200 lines minus some whitespace and a few comments.
Add the html and we have 2,000 lines and the rest of the functional javascript and we are up to about 5,000 lines.
Anything that is not needed to build the app is left to load after after the mapLayers have been added.
I have tested the same cached map layers in a simple basemap only application and the performance is on par with the REST javascript viewer.
It just doesn't seem to make sense that if the only thing the browser is doing, or at least what it is reporting under the NET or Network tabs of the dev kits is fetching 28 tiles, the performance I would think in theory should be the same regardless of what app the cached layers are in.
And another note the featureLayers that expose the geometry render their geometry almost instantly in a dynamic state.