Being new to JUCE, I am starting a new cross-platform project mainly for MIDI communication/processing. Although I plan to extract some functionality into simpler plugins, the main idea is a multi-window desktop app with a quite complex UI of lots of widgets etc. with realtime feedback, comparable to a DAW or a lighting console.
Keeping performance of such a complex UI in mind, I am struggling to determine whether to go the WebView UI route or stay with the native UI. Coming from the C++/Java world, I only have basic knowledge in Web technology, but would plan to dive deeper into that if it means a greater benefit in terms of performance and flexibility.
Looking forward to hear your opinion, thank you in advance!
Personally I’d stay with the standard JUCE UI rather than going for web views. It’s a more well trodden path IMHO. Just learn how it all ties together and how to keep paints optimal.
For a “quite complex UI of lots of widgets” I would look at web UI.
My advice would be to try both. Create a subset of your app UI with pure JUCE and the equivalent with a web UI. Check out some of the popular frameworks like React or Svelte.
To me this reads like “a lot of visual indicators with a high refresh rate” like meters and graphs. This might become a bottleneck because you need to transfer the data somehow from the C++ backend into the WebView instance. To get high enough performance you might have to go with an efficient serialisation on top of WebSockets or WebRTC. This complicates things quite a bit and it might or might not fit your use case.
The first experiment I would do is generate n amount of audio sources and feed those into level meters on the web ui frontent. Find out how many meters you can run with acceptable performance.
After this experiment you will have a feel for the data transfer and whether the performance will be enough.