Web browsers have a pretty powerful dev toolbox, that usually includes a Network tab where you can see the different kind of requests made by the page. Here you see a screenshot of the dev toolbox of Firefox, with which you can inspect a Websocket connection and the messages sent and received, including their time, content and size.
Depending on how slow is the internet connection you target, you could compute what would be an OK amount of data to transfer per image, and then see if there are ways to get to that size (doing more downsampling, casting the numpy arrays to integer, reducing the plot size, etc.). I don’t think there’s a way to sort of pre-transfer the data client-side to get less latency on file selection, but I may be wrong.
Also I’d suggest using threading instead of multiprocess to load the files, this is usually more suited to I/O operations like this. And in Panel the way to get something displayed while still loading data when a visitor reaches an app is to use pn.state.onload()
.