Я работаю над небольшой анимацией холста, которая требует, чтобы я шагал по большому листу спрайта png, поэтому я получаю много пробега от drawImage (). Раньше у меня никогда не было проблем с его использованием, но сегодня я сталкиваюсь со странной задержкой блокировки после запуска drawImage.
Насколько я понимаю, drawImage является синхронным, но когда я запускаю этот код, drawImage сработало! происходит примерно за 700 мс до того, как изображение действительно появляется. Стоит отметить, что в Chrome 700 мс, а в Firefox - 1100 мс.
window.addEventListener('load', e => {
console.log("page loaded");
let canvas = document.getElementById('pcb');
let context = canvas.getContext("2d");
let img = new Image();
img.onload = function() {
context.drawImage(
img,
800, 0,
800, 800,
0, 0,
800, 800
);
console.log("drawImage fired!");
};
img.src = "/i/sprite-comp.png";
});
![enter image description here](https://i.stack.imgur.com/CO2OI.gif)
В более широком контексте этот код выполняется в цикле requestAnimationFrame, и я испытываю эту задержку только во время первого выполнения drawImage.
Я думаю, что это связано с большим размером моего листа спрайта (28000 × 3200) @ 600 КБ, хотя событие onload, похоже, срабатывает правильно.
edit: вот распечатка времени (мс) между кадрами rAF. Я получаю этот результат последовательно, если не удалю функцию drawImage.
![enter image description here](https://i.stack.imgur.com/eqFRo.png)