You want fast matrix multiplication? Pretend you're doing texture shading in a language primarily used for dynamic web frontends!
Granted it doesn't have AMD support, I'm fairly confident even the CPUs can out perform the javascript library.
A texture is just data and a shader mutates that in a highly parallel way with specific coherence semantics. Before knocking it, I suggest educating yourself a bit more.
Don't expect anything better soon as companies focus on performance per watt and will only develop things in that path.
JavaScript in the browser lacks good data manipulation libraries (nothing that comes close to using Pandas, or R). Even loading/saving files with the browser is a PITA (by design really, for security reasons).
I can see a day when JavaScript (or web assembly) has APIs like Numpy and Pandas, but for now It's simply easier to install one of those than try and do everything in JavaScript.
Node adds file support, but libraries for stuff like dataframes are still in their early days. That might not be a problem for example problems, but real world data needs cleaning up before you can start doing ML.
JS has improved over the year but you can also go with a typed language if you wanted like purescript or typescript.
You have created an abstraction that is pretty portable. You'll probably be able to capture new performance enhancements as they occur on web runtimes. Maybe I'll try it out.