That said, I hit performance issues very quickly, when trying to do interactive data visualization - and by interactive, I mean changing the data, not chart styling. That may be because every time data changes, I have to repackage it into Vega-Lite JSON description and rerender the chart. I wonder if there's a better way of doing it? A partial update? I couldn't find anything in the docs last time I tried.
Related: what would be the best alternative in JS, short of writing my own d3/canvas code, for cases where I have a structurally fixed (but possibly complex) chart, but I need to hit it with 100k or 1M data points and have it redraw under 100ms?