What I did with TXText control and Leonids wrapper TX Text Control (klarisoft.com) because this handled pdf & word docs and html, was I had a browse on the left and a scalable thumbnail image of the document showing on the right.
As it was an image, it was faster to load, and when ever a document was linked into my app or created within my app, it created a scalable thumbnail image for this purpose.
This way when scrolling in the browse, it was fast enough to run over an unmanaged switch network pulling the image files off the server and the browse hilight bar scrolled as fast as if there was no image to display.
In my experience, once you start having multiple viewers for documents on a sheet control with each viewer on its own tab, the user cant scroll up or down or page up or down as quickly in my experience.
One other trick which helps to avoid pulling files down which are never going to be shown, is to place the code that displays the image, but you could use this for the viewers if you still want to go the viewer route, is on the window timer.
So when the browse box has rested on a record in the browse, after a few tens of milliseconds, it pulled the image (or could display the viewer). I found a second was too long to wait before showing the image, and about half a second sometimes was too quick. The problem was some users press and hold the arrow keys when scrolling whilst others would press the up or down arrow key once then lift their finger up and then press the arrow key again, what I call slow scrolling. This half second meant slow scrolling users would end up pulling the images down when they didnt want/need to, which then congested the network. You get plenty of users doing this at the same time and your network basically experiences a Distributed Denial Of Service of sorts, it then slowed all users down.
I didnt spend any time writing code working out their scrolling pattern and adjusting the timer interval to suit, but it is a factor which could have been coded for, but if you choose to put the code in a timer event to wait for a few tens of a millisecond before displaying something, this will help reduce network congestion. Otherwise users could be on the phone to you, when they are at their busiest and wont be happy at all with the speed of your app. I speak from experience on this one!