Isn't node JIT? It might have a slower startup time, but it should be about as fast as a compiled language once running.
Modern JavaScript VMs like V8 will often optimise functions treating types as static, then "deoptimise" in the rare case their type assumptions are broken.
[1] https://news.ycombinator.com/item?id=13774326 [2] https://en.wikipedia.org/wiki/SpiderMonkey
And that logic that's needed to test invariants is exactly the overhead we're talking about.