RyanGo Is there some sort of limit to how much data I can send to the GUI buffer?
I feel like you have asked this before... No hard limit, but at some point something will choke. Sending data takes Bela CPU time and parsing it in the browser takes the host computer's CPU time. None of those is infinite. The one on Bela is more sensitive to peak usage, so sending large buffers sparingly, while overall more efficient (because it minimises the overhead associated with sending one packet), it may cause local hiccups due to the spike in CPU load associated with a large buffer.
RyanGo For example should I try to keep all my calculations in the C++ code and just send the results as buffers?
Well ... it really depends on the application. For instance, sending a buffer of time-domain samples will cost the same as sending the result of the FFT on the same buffer (assuming you only send frequency bins between 0 and Nyquist), but it would be cheaper for Bela if you were to perform the FFT in the browser (in my example I don't do that because a) I don't know how to do FFTs in javascript and b) I only send one buffer every update, updates are "sparse", so overall there is not much Bela CPU usage). On the other hand, if you were to display the average of several FFTs, if you do the FFT on Bela you can send only one buffer instead of several, at the expense of running several FFTs on Bela.
RyanGo d? Ex. How often is the sketch's draw() function called?
As fast as possible or at the specified (or default) frameRate(), whichever the smallest.
RyanGo Does the ControlDataCallback happen outside the audio thread?
Yes it does, which is why in my example I can run plenty of non-real-time safe code in there.