The map kind of does. It's really nice to just click on different dots and see different cities with no latency or page load. I think the right way to implement this is as an SPA with `history.push` for shareable URLs.
Not without latency. Unless you make sure everything's on the edge? But that is way more complicated anyways — now you have two systems to maintain, instead of just a single client-only JS app.