I would assume (although I, of course, don’t know either) that it might also be that they (I believe I read they’re doing something like this somewhere, but that could just as well be my mind playing tricks on me) have a “renderer” for the scenegraph
data structure integrated into the app.
This would, of course, mean that it’s “only” necessary to serve the scenegraph data (and, possibly, images used in the scenegraph as data uri), which should be a lot smaller than a screenshot (especially when you strip down the unnecessary parts for rendering it).
Also, to make this even faster, it would than be possible to just send diffs after the first “full sync”, meaning the only thing that would have to get submitted would be “SceneNode with GUID XXX was moved to x=360, y=250”. That’s just pure speculation on my part, though…