Назад | Перейти на главную страницу

Почему мой браузер не загружает сразу все ресурсы изображений?

Я пытаюсь оптимизировать время загрузки веб-страницы. В настоящее время основной HTTP-запрос может быть выполнен менее чем за секунду, однако последовательная загрузка изображений кажется "каскадной":

http://picpaste.novarata.net/pics/320bd387b4988729ad2dbb10f69a7857.png

Я использую nginx для обслуживания своих статических файлов с 3 рабочими. Есть ли вероятность, что соединения задерживаются из-за невыполненных работ?

Я предполагаю, что все эти изображения будут загружены одновременно. Файлы обслуживаются через HTTPS, время активности установлено на 65 секунд.

РЕДАКТИРОВАТЬ: Firefox действительно пытается загрузить их сразу, однако время соединения постепенно увеличивается до более чем 2 секунд:

http://picpaste.novarata.net/pics/32c28414501d165df3e04b01e3ac3084.png

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

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

Это поведение зависит от вашего браузера. Например, если вы используете Chrome, вы можете обнаружить, что график времени показывает такое же поведение, но на какое-то время все «застопорилось»; это, вероятно, связано с ограничением [Chrome] 6 одновременных подключений на источник.

Вы не говорите, какой браузер и версию вы используете.

Вот выдержка из https://developer.chrome.com/devtools/docs/network#resource-network-timing

Задержка / блокировка Время ожидания запроса перед его отправкой. Это время включает все время, потраченное на согласование прокси. Кроме того, это время будет включать, когда браузер ожидает, когда уже установленное соединение станет доступным для повторного использования, соблюдая максимальное количество TCP-соединений Chrome для каждого правила происхождения.

Это может зависеть от настроек KeepAlive. Если установлено - сервер будет пытаться использовать как можно меньше подключений (совместно с браузером). Однако при этом общение становится «синхронным», поэтому появляется сообщение «Я прошу А и не буду просить Б, пока А не будет здесь». Также Сервер должен отправлять элементы в том порядке, в котором были получены запросы, а не в том порядке, в котором он смог обработать эти запросы. Это ограничение HTTP / 1.1.

Вы спрашиваете о поведении HTTP / 2, при котором операции асинхронны и происходит реальное мультиплексирование.