> Good point, I think part of the problem has to do with the fact that save > is non-selective (saves all of the state).
Yes, since save() and restore() save and restore everything, it creates the side effect of needing to set ctx.font/fillStyle/strokeStyle more often than otherwise, which are slow to set, probably because of some CSS parser activity, but I'm not wise enough to know. If there was merely a way to save and restore the context, or perhaps some other subset of state, that would probably work nicely too.