Canvas Alpha имеет значение
Для достижения наилучших результатов вы должны оставить размер холста таким же, как и его разрешение.Если на холсте нет прозрачных пикселей, необходимо отключить альфа.
Отключить альфа холста с помощью const ctx = canvas.getContext("2d",{alpha: false})
Масштабирование не имеет значения
Для большинства устройств масштабирование отсутствует.более дорогая операция, чем рисование немасштабированного изображения.
Стоимость рендеринга зависит от количества прорисованных пикселей, а не от количества пикселей в источнике.
Оценка стоимости рендеринга
Стоимость drawImage
Если разрешение холста составляет 200 на 200, и вы рисуете изображение ctx.drawImage
, которое заполняет его, то есть 40 000 пикселей, которые необходимо визуализировать.
Стоимость компоновки
Если этот холст масштабируется с помощью правила CSS, даже если альфа отключена, элемент холста должен быть скомпонован для отображения.Стоимость будет равна количеству пикселей, занимаемому размером холста.
Если холст имеет альфа-значение true, его необходимо объединить с фоном, поэтому стоимость рендеринга - это размер отображения холста в пикселях.
Если размер холста (CSS) соответствует разрешению, а альфа отключена, тогда холст не нужно компоновать для финальной презентации, и нет дополнительных затрат на компоновку.
Стоимость рендерингапримеры
canvas
- видимый элемент canvas image
- изображение, которое может поместиться в ОЗУ графического процессора
Лучше всего с выключенной альфа ибез CSS-масштабирования
canvas.width = canvas.height = 100;
canvas.style.width = canvas.style.height = "100px";
const ctx = canvas.getContext("2d", {alpha: false});
ctx.drawImage(image, 100, 100);
// Total rendering cost 100 * 100 = 10,000 pixels
масштабирование с помощью CSS и выключение альфа-канала
canvas.width = canvas.height = 200;
canvas.style.width = canvas.style.height = "100px";
const ctx = canvas.getContext("2d", {alpha: false});
ctx.drawImage(image, 200, 200);
// Total rendering cost 200 * 200 + 100 * 100 = 50,000 pixels
рендеринг с включенным альфа-управлением, без масштабирования CSS
canvas.width = canvas.height = 100;
canvas.style.width = canvas.style.height = "100px";
const ctx = canvas.getContext("2d"); // alpha is on
// same as const ctx = canvas.getContext("2d", {alpha: true});
ctx.drawImage(image, 100, 100);
// Total rendering cost 100 * 100 + 100 * 100 = 20,000 pixels
Примечания
- Существует неизбежная стоимость рендеринга из-за настройки страницы, прокрутки и других факторов.Эти затраты игнорируются, так как их нельзя избежать.
- Возможность поворота альфа-канала может быть доступна не во всех браузерах.
- Программный рендеринг и возможности устройства будут оказывать наиболее существенное влияние на рендеринг.производительность.