Объединить несколько изображений вместе для HTTP?

У меня есть страница с несколькими сотнями небольших изображений, которые необходимо загружать при посещении страницы. Общий объем данных составляет 11 МБ, но загрузка всей страницы по-прежнему занимает более 11 секунд.
Глядя на профилировщик сети Chrome, становится совершенно очевидным, что большая часть времени тратится впустую на ожидание соединений. Типичное изображение имеет:
- 0,13 мс - Запрос отправлен
- 240,01 мс - Ожидание (TTFB)
- 1,13 мс - Загрузка контента
Это, с политикой Chrome только 6 параллельных TCP-соединений, означает, что многие изображения ждут 10 секунд для загрузки.

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

Есть ли способ упаковать все изображения в одну загрузку, а затем распаковать в JS в браузере? Я знаю о методе dataurl, но я надеялся найти способ избежать раздувания base64.

Обновлено:
Обратите внимание, что изображения являются частью большого SVG на странице, поэтому будет ли решение со спрайтами работать в SVG?

Спрайты: developer.mozilla.org/en-US/docs/Web/CSS/CSS_Images/…

Alex K. 30.05.2019 14:49

Используйте HTTP/2, чтобы конвейеризировать все это вместе…

deceze 30.05.2019 14:51

@deceze, как указать использование HTTP/2 на веб-странице? Я не контролирую сервер, который его обслуживает

shoosh 30.05.2019 15:20

Тогда вам немного не повезло. Конечно, сервер должен поддерживать это.

deceze 30.05.2019 15:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать Таблицы спрайтов CSS.

Живой пример: bkmks.com использует этот трюк, чтобы ускорить загрузку фавиконов лотов с помощью лист спрайтов вот такой.


Обновить: Рабочий процесс и синтаксис немного отличаются, но также возможны SVG-спрайты:

Поскольку у вас есть растровые изображения внутри SVG, вам, возможно, придется проделать трюк со спрайтами внутри в SVG. Синтаксис SVG image, кажется, поддерживает это.

Если настоящие изображения — это просто чистые растровые изображения (SVG — это просто «контейнер»), я бы попытался удалить слой SVG. Это потребует замены всех ссылок в HTML на SVG ссылками на таблицу спрайтов CSS.

Неожиданная проблема: изображения на самом деле находятся в большом SVG, который является частью HTML страницы. Из быстрого теста кажется, что элемент svg не отвечает на свойство фона CSS. Есть идеи?

shoosh 30.05.2019 15:18

@shoosh: обновлен ответ на учетную запись для изображений SVG.

Leftium 30.05.2019 15:37

Извините, я до сих пор не могу понять. У меня есть растровые изображения внутри SVG, которые также имеют другие векторные изображения. Я хочу, чтобы все растровые изображения были в одном изображении спрайтов. Я могу использовать x = "" и y = "" для указания смещения в большом изображении, но большое изображение по-прежнему масштабируется в соответствии с шириной маленького изображения = "" и высотой = ""

shoosh 30.05.2019 22:10

Ах, мне не хватило saveAspectRatio = "xMinYMin slice"

shoosh 30.05.2019 22:17

Другие вопросы по теме