We do millions of edges in the browser fine via webgl (graphistry.com / https://github.com/graphistry/pygraphistry ) .
For forceatlas and other interactive & iterative analytics algs (t-sne, ...), it's hard to keep 100K+ nodes interactive via webgl. Most webgl attempts go naive all-to-all O(n^2), so the graph size quickly hits a ceiling. We rewrote to use GPUs end-to-end in the server so we can do trickier opencl/cuda algs that achieve O(nlogn) and O(n). Funny enough, users don't notice round trip costs -- or get even faster perf -- as our 2.0 engine does live streaming between client/cloud to hit ~20fps, similar to how streaming movies keep up frame rate.
Our problem is now that JS only supports pointers up to 2GB :)