Я обнаружил странное поведение в моей функции drawBuffer, которое не могу объяснить или исправить, поэтому давайте посмотрим, может ли кто-нибудь мне помочь.
В основном эта функция рисует буферный холст из изображения, содержащего несколько изображений. В большинстве браузеров это работает как шарм и создает + заполняет холст буфера менее чем за миллисекунду. Но с IE9 я обнаружил, что в первый раз, когда я рисую в буферный холст, это занимает около 10 миллисекунд. И с этим, это действительно замедляет мое приложение, так как оно должно работать со скоростью 30 кадров в секунду.
Я доказал, что только первая ничья занимает эти огромные 10 миллисекунд. Если вы выполните мой код, вы заметите, что у меня сразу второй вызов drawImage после первого, и этот второй вызов drawImage проходит через 0 миллисекунд.
UiElement.prototype.drawBuffer = function () {
if(!this.bufferCanvas || !this.bufferContext) {
this.bufferCanvas = document.createElement('canvas');
this.bufferCanvas.width = this.sprite.getWidth();
this.bufferCanvas.height = this.sprite.getHeight();
this.bufferContext = this.bufferCanvas.getContext('2d');
} else {
this.bufferContext.clearRect(0, 0, this.bufferCanvas.width, this.bufferCanvas.height);
}
var image = this.sprite.getImage();
var startx = this.sprite.getStartX(this.spriteFrame);
var starty = this.sprite.getStartY(this.spriteFrame);
var width = this.sprite.getWidth();
var height = this.sprite.getHeight();
this.bufferContext.clearRect(0, 0, this.bufferCanvas.width, this.bufferCanvas.height);
this.bufferContext.drawImage(
image,
startx,
starty,
width,
height,
0,
0,
width,
height
);
// 2nd draw is here only for debug purposes
this.bufferContext.drawImage(
image,
startx,
starty,
width,
height,
0,
0,
width,
height
);}
Итак, подведем итог:
Создать холст - 0мс
1-е изображение - 10 мс (WTH?)
2nd drawImage - 0ms
Есть ли какой-нибудь способ стимулировать холст g-spot, чтобы она позволила мне быстрее нарисовать этот кулак?