Скорость рендера в canvas
Все приветы.
Для отрисовки картинок создаю теги img и храню все данные об элементе в одном массиве. Ускорит ли работу если хранить это в теге канваса, или можно как то по лучше сохранить картинку что бы потом ее можно было быстро использовать в канвасе. для тех кому нужен код: функция перевода объекта анимации с записыванием в массив
function createNewEventObject(nameObject, nameEvent, Event) {
var elem = arrayObject[nameObject][nameEvent];
//Запись параметров перемещения объекта
for (var o in Event) {
if (typeof Event[o] == 'object' && Event[o] != null) {
elem[o] = new Object();
//Если значение является объектом тогда проходимся циклом по нему
for (var a in Event[o]) {
if (typeof Event[o][a] == 'string' && Event[o][a].indexOf('src') != -1) {
var img = new Image(); // Замена на img так как canvas не работает с урами
img.src = Event[o][a];
elem[o][a] = img;
} else if (typeof Event[o][a] == 'object') {
//создаем дополнительное вложение
elem[o][a] = new Object();
for (var i in Event[o][a]) {
//Снова делаем проверку на то нужно ли создавать img
if (Event[o][a][i].indexOf('src') != -1) {
var img = new Image(); // Замена на img так как canvas не работает с урами
img.src = Event[o][a][i];
elem[o][a][i] = img;
} else {
elem[o][a][i] = Event[o][a][i];
}
}
} else {
elem[o][a] = Event[o][a];
}
}
} else {
elem[o] = Event[o];
}
}
}
ну а руссую на canvas вот так
ctxMan.drawImage(
directions, //Объект Image анимации
Math.round(elemEvent.fw * step), //Берем текущий кадр, ширина кадра * шаг
0, //Кадры идут один за другим, тут 0
elemEvent.w, //Вырез в ширину объекта
elemEvent.h, //И в высоту
elemPosition.x+shiftX, //Размещаем по горизонтали на холсте
elemPosition.y+shiftY, //И по вертикали
elemEvent.w, //Ширина как у кадра
elemEvent.h //Ну и высота
);
|
А Вы к этой функции createNewEventObject один раз при загрузке обращаетесь или постоянно?
Картинка главное что сохраняется в кэше браузера и после загрзки в канвас быстро вставляется А где хранить ссылку на картинку все равно |
Цитата:
Просто если будет много разных элементов то отдать какой либо JSON, будет удобней править и понимать что происходить. нежели писать все это в массивах которые отвечают за какие то параметры объекта который нужно изобразить на канвасе |
Цитата:
в канву вставляется объект имидж,какой создаётся- new Image(). кеш важен только при создании объекта . розовый слоник, 1 ты не проверяешь полную загрузку в new Image() -через онлоад- легко возникнет ситуация-вставляешь изображение в канву,а ничего не меняется 2 при большом количестве new Image() -браузер начинает ложится так что вопрос скорости -только экспериментально и индивидуально |
Цитата:
|
вобщем смотри как можно сделать.
загнать всё в кеш браузера- невидимые изображения и отслеживать их загрузку,и так последовательно для всех изображений.-на всё один тег img Соответственно можно использовать один new Image() для последующей работы с канвой -будет грузится в него быстро,поскольку изображения закешированны браузером. Т.е сначала кешируем,потом как все закешировали начинаем работать с ними.Естественно что при последующих входах уже изображения будут в кеше количество <img> и new Image() можно подобрать индивидуально. от того что их будет по 10 -ничего страшного не будет а скорость при первой загрузке/при работе с канвой может подняться в разы-зависит от задачи |
| Часовой пояс GMT +3, время: 20:10. |