вот не много запутался как лучше сделать,
на канве отрисовуется довольно много раз одна и таже картинка и что бы не загружать ее каждый раз заново написал такой код
var imgCache = loaded[type.bg];
if (!imgCache) {
var img = new Image();
img.src = type.bg;
img.onload = function () {
drawImg.call(this, x, y, width, height);
};
loaded[type.bg] = {
obj: img,
loaded: false
};
img = null;
}
else {
if (imgCache.loaded)
ctx.drawImage(imgCache.obj, x, y, width, height);
else {
if (!imgCache.sub) imgCache.sub = [];
imgCache.sub.push(function () {//"подписка" на загрузку картинки
ctx.drawImage(imgCache.obj, x, y, width, height);
});
}
}
function drawImg(x,y,width, height) {
loaded[type.bg].loaded = true;// картинка загружена
ctx.drawImage(this, x, y, width, height);
var sub = loaded[type.bg].sub;
for (var i = 0; i < sub.length; i++) sub[i]();// вызов "подписчиков"
};
или через кэш браузера будет быстрей?