Why not attach a buffer to the front of the synth and run the audio rendering in a separate thread? Isn't this how software synths work now? What's preventing this from happening in the browser?
Also, the MIDI format is not slow to generate or to read, it is actually designed for speed (and may other perks) and any implementation of it would be very likely faster than any other format you could come up with. Of course, you would still have to deal with its complications and the many particularities and edge-cases it has.