Анимации в canvas достаточно быстрые, особенно если нет никаких манипуляций типа даунскейла и прочего.
У вас же ошибка в том, что вы во время отрисовки анимации загружаете картинки, еще и ждете загрузку 512 мс. Или я не так понял код.
Нужно предзагрузить в Image все картинки, и после загрузки включать попеременный drawImage на эти картинки.
Собрал на коленке простой пример. Возможно где-то плохо написал, но время позднее, главное суть и демонстрация.
https://codesandbox.io/s/cut-canvas-animation-k6liw8 (кошак на анимации прыгает, я просто не очень удачно гифку на png порезал).
Можно хоть 60 кадров в секунду рисовать (или больше для высокогерцовых мониторов), ничего не должно тормозить.
Для спрайтов тот же самый смысл, только там не меняется картинка, только координаты в drawImage.