I can answer you #2:
requestAnimationFrame schedules the rendering to when the
screen refreshes, which kinda makes sense in this case. (Which is a great thing when you're doing animations or games, since no frames are being dropped)
It also doesn't fire while the tab is not active, so that's a plus too.
I've nothing to do with this project though, so I might be wrong on the details.