Virtual DOM overhead
Contrary to the popular belief, Virtual DOM has a lot of CPU and memory overhead.
In React (and other similar libs), you're each time re-creating a whole vdom tree from scratch, diff-ing that tree with a previous one and then applying the changes to the real DOM.
For something lighter and more efficent, check out libs like lit-html and hyperHTML (they are using es6 template literals, so they understand which parts are static and which can change).
Alternatively, see Thin client SPA for places where you can use server side rendering.