I'm not even switching tabs.
Doesn't appear to even display in IE11, although to be fair, I just opened my DR-110 up and, while it renders, and most of the buttons are functional, the knobs are not, and no audio plays back.
Playback of beatpetite seems steadier in Chrome, but as I typed that, I got an audio hiccup. The visuals are noticeably jerky. Again comparing to my DR-110, it's pretty clear I'm using a different approach to the audio playback because I'm getting seriously weird glitches on my playback. And the CSS buttons don't quite line up on mine in Chrome the way it does in the other two browsers.
I wouldn't spend too much time chasing a solid tempo down. That's essentially out of your control.
Yeah, I think Firefox isn't quite up to the job yet. But I think Chrome's performance is indicative that it is possible.
I'm using the technique described in this article, but with a web worker, meaning that the clock doesn't stop when changing tabs.
Also, you might want to go a bit easier on history.pushState() :-). I had a heck of a time getting back here.
http://beatpetite.com
As an aside, the drum sounds themselves are generate using the web audio api.