The issue is the callback, it introduces significant overhead because it is a new context with its own scope on a per callback basis.
Yes, exactly. I suppose if you registered the callback as a named function expression, a good js engine might be able to optimize on it and inline it, but I also don't like leaning on compilers so much.