The reason why transform & opacity (via CSS animations) are always recommended is because they can be done completely on the compositor thread without going back to the main thread.
Thanks for the explanation. Yeah, I noticed that the hard way. I now moved off JavaScript and went back to classic C++ game programming. I like it much more at this lower level with fine-grained control.
If you need to run every frame of animation from JS then, yes, you're screwed. At least until https://groups.google.com/a/chromium.org/d/topic/blink-dev/Y... & https://github.com/flackr/compositor-worker)