Cuando de dibujar, animar y performance en un canvas se trata, lo primero a revisar es requestAnimationFrame (acá un muy buen recurso:
http://www.paulirish.com/2011/reques...art-animating/ ).
De que se trata requestAnimationFrame? El ojo humano distingue una imagen 60 a 70 veces en un segundo. Entonces para que redibujar un canvas, más veces de lo que el ojo humano sería capaz de ver. Este es el primer paso para optimizar la performance en un juego.
A partir de aquí si los problemas continua habría que hilar fino sobre el código