Gatsby - предотвращает встраивание маленьких изображений в URI данных - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь предоставить изображения для каждого из apple-touch-icon размеров в моем теге head.Я делаю это так:

// not shown: import all image files: logo57, logo76, etc
<link rel="apple-touch-icon" sizes="57x57" href={logo57} />
<link rel="apple-touch-icon" sizes="76x76" href={logo76} />
<link rel="apple-touch-icon" sizes="120x120" href={logo120} />
<link rel="apple-touch-icon" sizes="152x152" href={logo152} />
<link rel="apple-touch-icon" sizes="167x167" href={logo167} />
<link rel="apple-touch-icon" sizes="180x180" href={logo180} />

Проблема в том, что при визуализации страницы все эти изображения включаются непосредственно в страницу как базовые 64 в URI данных, а не в относительные URL.Вот так:

<link rel="apple-touch-icon" sizes="180x180" href="data:image/png;base64,iVBORw0KGgoAAAA....">

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

Это документированная оптимизация для изображений <10000 байт,так что может быть незначительной разницей, что они все загружены здесь.Но общий размер исходных файлов png составляет около 27 КБ (о преобразовании в базу 64 я ничего не знаю), и мне кажется, что я бы предпочел не включать эти данные в каждую страницу, если она не нужна. </p>

Я обнаружил, что могу переместить все изображения в папку / static и сослаться на них с помощью href="logo57.png", но затем я теряю проверку на время компиляции, что эти изображения действительно присутствуют в данном href, а такжевключение хэша изображения в имя файла (по причинам кэширования).

Как я могу сказать Гэтсби не вставлять эти изображения непосредственно на страницу как URI данных?

1 Ответ

0 голосов
/ 22 октября 2018

Вместо того, чтобы использовать Webpack для этих ресурсов (import x from "..."), вы должны поместить их в папку static и ссылаться на них напрямую.Если ваш сайт Gatsby не имеет префикса (то есть файл index.js подается с /), вы можете жестко закодировать пути (например, href="/favicon.png").В противном случае вы можете использовать с префиксом для предоставления префикса в рабочей среде.

...