Вы действительно не можете избежать поведения - когда элемент <img>
вставляется в DOM или изменяется src
, браузер получает ресурс.
Вы можете уменьшить влияние, хотя - там На ум приходит несколько способов:
- Использовать эффективное кэширование. Когда клонированное изображение приводит к ответу
304
, данные изображения не будут повторно переданы, но будет использоваться локально кэшированная версия. - Используйте сервисного работника для кэширования изображения и используйте «cache- первая »стратегия, при которой работник сервиса всегда немедленно отвечает локальной версией в кэше.
- Выполните
fetch
для изображения, создайте URL-адрес данных и используйте URL-адрес данных в качестве источника для исходного и клонированных изображений. , Обратите внимание, что из-за кодировки URL-адреса данных больше, чем фактические двоичные данные.
Вот пример для (3):
const img = new Image();
document.body.appendChild(img);
fetch('https://example.com/image.jpg')
.then(res => res.blob())
.then(blob => URL.createObjectURL(blob))
.then(dataUrl => {
// load the image via the created data URI
img.src = dataUrl;
// clone the image
setTimeout(() => {
const clone = img.cloneNode();
document.body.appendChild(clone); // won't request the image from the server again.
}, 1000);
});