Можно ли сделать в canvas js анимацию без спрайт-листа?
Анимации в canvas достаточно быстрые, особенно если нет никаких манипуляций типа даунскейла и прочего. 
У вас же ошибка в том, что вы во время отрисовки анимации загружаете картинки, еще и ждете загрузку 512 мс.  Или я не так понял код. 
Нужно предзагрузить в Image все картинки, и после загрузки включать попеременный drawImage на эти картинки. 

Собрал на коленке простой пример. Возможно где-то плохо написал, но время позднее, главное суть и демонстрация. 

https://codesandbox.io/s/cut-canvas-animation-k6liw8 (кошак на анимации прыгает,  я просто не очень удачно гифку на png порезал). 

Можно хоть 60 кадров в секунду рисовать (или больше для высокогерцовых мониторов), ничего не должно тормозить. 
Для спрайтов тот же самый смысл, только там не меняется картинка, только координаты в drawImage.
Не хранить изображения в png, а подготовить видео файл из них (например секунду на кадр), крутить в video, при желании в режиме паузы, переключая по номеру времени currentTime, либо, если нужно именно на canvas, смотреть как это предлагает документация