Hi Nicholas,
In your case, I suppose you are working with data amounts of around 200 megabytes or more. If not, I wonder why it could take so long. I base this assumption on my own experience with both my own app and on a unit test that tests the performance of adding 10,000 objects (taking 2-3 seconds on FF on a laptop and 6,6 seconds on opera in an android phone).
If so, I believe that both Ram memory and bandwidth could be bottlenecks in your case. It could then be wise to perform the download in chunks of around 1000 items a time to save ram as well as showing a progress bar to the user while download is taking place to make the so more responsive. Notice that this will require you to do the data download in multiple transactions (one per chunk of 1000 items). Using much ram can otherwise slow down the browser. I also suppose the download time could be quite time consuming.
For the user experience, if feasible, do the sync in background without locking the db (not as the populate from ajax sample where database is locked until complete) and the user can start using the data while it's being downloaded. If that's not feasible (data has to be complete in order to work at all) just do the progress bar.
Am I right in assuming the amount of data or do you believe it could it be something else that makes it slow in your case?