Expose in batch API: syncProject(). This will:
Fetch and cache all issues of all files;
Fetch and cache all line hashes or generate them locally;
Fetch and cache all users for the issues' assignees;
In short, all data specific to a project.
It always gives an error if server is not available. For each project cached, there is a corresponding status file.
When executing runAnalysis(project), it will check the corresponding cache's status, and trigger a syncProject() if needed.
For the sync, a specific container should be used, which will fill the cache using the WS Loaders. It will have a specific logic that will enable for it to fetch, for example, all line hashes for all files in a project.
This logic can include making parallel requests (to avoid network latency).
Using a minimalist custom container will make it very fast to start up.