Нюансы о производительности setTimeout/setInterval в связи с canvas?
используй requestanimationframe
- Использовать 2-3 наложенных друг на друга canvas как слои;
- Кешировать в img все, что можно заранее нарисовать и при отрисовке использовать только drawImage();
- Не перерисовывать все, что можно не перерисовывать.