webp / jpg — Предварительная загрузка только необходимого типа в HTML-файл

#html #jpeg #webp #preloading

#HTML #jpeg #webp #предварительная загрузка

Вопрос:

у меня есть веб-сайт, и я использую webp и jpg в качестве запасного варианта. в заголовке у меня есть изображение bis и изображение меньшего размера для мобильных пользователей.

Итак, у меня есть 4 файла:

 header-big.webp
header-small.webp
header-big.jpg
header-small.jpg
 

Поскольку он находится в заголовке, я хочу предварительно загрузить изображение, но только то изображение, которое мне нужно.
для маленьких и больших я могу предварительно загрузить его с помощью media-атрибута.

 <link rel="preload" href="header-small.jpg" as="image" type="image/jpg" media="(max-width: 575px)">
<link rel="preload" href="header-small.webp" as="image" type="image/webp" media="(max-width: 575px)">
<link rel="preload" href="header-big.jpg" as="image" type="image/jpg" media="(min-width: 576px)">
<link rel="preload" href="header-big.webp" as="image" type="image/webp" media="(min-width: 576px)">
 

В этом случае браузер всегда предварительно загружает два файла, в зависимости от его ширины, но все равно будет использоваться только один из них.

и да, это имеет смысл, потому что jpg и webp могут быть реализованы одновременно. поэтому, конечно, браузер предварительно загружает оба.

но могу ли я сказать «если вы поддерживаете webp, предварительно загрузите webp и не загружайте jpg»?

Спасибо, Флориан

Комментарии:

1. Что-то вроде этого?

2. Нет. Это касается реализации, которая уже работает. Моя проблема заключается в предварительной загрузке изображений. Я хочу избежать предварительной загрузки формата iage, который не используется.

3. На самом деле очень хороший вопрос! Я только что столкнулся с той же проблемой прямо сейчас и искал решение «динамически предварительной загрузки», поскольку некоторые браузеры по-прежнему не поддерживают WEBP, я хочу дать им возможность предварительно загрузить JPG (jpeg), но нигде не нашел способа добиться этого! Ваш вопрос получил мой 1

Ответ №1:

Решение, которое я реализовал, включает в себя небольшой скрипт, взятый из https://avif.io/blog/tutorials/use-avif-in-css / для обнаружения AVIF и WEBP, потому что мне уже нужно было добавить поддержку CSS для обоих форматов, но для вашего варианта использования это может быть немного упрощено. Как только я узнаю, что он поддерживается, я добавляю preload ссылку в заголовок.

Я поместил сценарий в самый конец заголовка, потому что в моем конкретном случае мне не нужно создавать изображение раньше.

 <script type="text/javascript">
  function addPreloadLink(img, type) {
    var fileref = document.createElement('link');
    fileref.setAttribute('rel', 'preload');
    fileref.setAttribute('as', 'image');
    fileref.setAttribute('href', img);
    fileref.setAttribute('type', type);

    document.head.appendChild(fileref);
  }

  function AddClass(c) {
    document.documentElement.classList.add(c);
  }

  var webp = new Image();
  webp.src =
    'data:image/webp;base64,UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==';
  webp.onload = function() {
    AddClass('webp');
    addPreloadLink('header-small.webp', 'image/webp');
    addPreloadLink('header-big.webp', 'image/webp');
  };
  webp.onerror = function() {
    //load JPG
    addPreloadLink('header-small.jpg', 'image/jpg');
    addPreloadLink('header-big.jpg', 'image/jpg');
  };
</script>
 

Комментарии:

1. Просто обратите внимание, что это нормально, если, как сказано в ответе in my particular case I don't need to have image earlier , но если изображение, которое вы предварительно загружаете, является элементом LCP, это может снизить ваш показатель Lighthouse LCP из-за дополнительного времени, затраченного на анализ / выполнение скрипта и динамическое внедрение <link> элемента в DOM.

Ответ №2:

Итак, я пришел к этому вопросу, потому что пытаюсь улучшить LCP для последнего обновления поискового сигнала Google. Я тоже хотел предварительно загрузить webp, когда поддерживается, и предварительно загрузить jpg, когда нет.

В случае предварительной загрузки jpg, когда webp не поддерживается, это может произойти только в том случае, если браузер поддерживает предварительную загрузку, а не webp. Когда я посмотрел на https://caniuse.com/webp и сравнил его с https://caniuse.com/link-rel-preload чтобы определить, насколько велика эта область пересечения, я заметил, что существует не так много версий браузеров, которые поддерживают предварительную загрузку, а не webp, в основном safari. Я суммировал это пересечение в таблице ниже. Столбцы webp и preload показывают первую версию с достаточной поддержкой webp и элемента link и предварительной загрузки соответственно. Столбец version gap показывает, какие версии попадают в категорию «поддерживает предварительную загрузку, но не webp», и% пользователей в gap, показывает, какой процент глобальных пользователей попадает в эту категорию и выиграет от предварительно загруженных файлов jpeg. % были агрегированы из https://caniuse.com/usage-table

Браузер WebP Предварительная загрузка Разрыв версии % пользователей в gap
IE NA NA
Edge 18 17 [17-18) 0.03%
FireFox 65 85 (56 *, 57-84 отключены по умолчанию) 56 0.01%
Chrome 32 50
Сафари 14* 11.1 [11.1-14) 0.65%
Opera 19 37
Safari (iOS) 14.4 11.3 [11.3-14.4) 1.24%
Opera Mini ВСЕ NA
Браузер Android 4.2 91
Opera Mobile 62 NA
Chrome для Android 91 91
Firefox для Android 89 89
UC для Android 12.12 NA
Samsung Internet 4 5
QQ браузер 10.4 NA
Браузер Baidu 7.12 NA
KaiOS NA NA
ИТОГО 1.93%

Итак, примерно 1,93% во всем мире, и я предполагаю, что если ваша аудитория в основном из США, то, вероятно, меньше, если предположить, что в «развитом» мире больше людей используют новейшее оборудование и браузеры, чем где-либо еще. Я также ожидаю, что это число будет асимптотически уменьшаться к нулю с течением времени, и что пользователи, использующие эти старые браузеры, с большей вероятностью будут подключаться к более медленным соединениям.

Моя оценка из этого анализа заключается в том, что, вероятно, не стоит пытаться выполнять какую-либо предварительную загрузку файлов jpeg, если у вас есть доступные ресурсы webp, потому что пользователи, которые выиграют, — это а) небольшая доля от общего количества и б) вероятно, сложнее оптимизировать в целом, с уменьшающейся отдачей по мере того, как пользователизакройте эти версии браузера.

Если вы похожи на меня, и ваша цель — перевести достаточное количество пользователей с «плохих» и «нуждающихся в улучшении» показателей по основным веб-показателям в «хороший» диапазон, чтобы достичь порога 75% пользователей, указанного Google, вы получите какое-то специальное указание на «быстрый сайт» в спискерезультаты поиска, тогда вы, вероятно, можете не беспокоиться об этой когорте.