> the bottleneck in performance turns out to be the React frontend. It is the time taken by the React frontend to render execution updates that dictates the fastest possible execution speed.
Why have React re-render each time execution updates? I don't think a user could make use of an updated visualization more than a few times per second, so it seems possible to re-render at a fixed rate (or at least capped, e.g. via 'debouncing' which ever function triggers the state update) while letting execution run relatively independently.
Also: could you say more about what kinds of the things the visualizer is capable of showing? I checked out the examples for each language and can get some sense of its range from that but I'd be curious to know more. (For example, when I was working on a program state visualizer I opted to provide visualizations of particular data structures, e.g. lists, trees, tables, maps etc.)