Тайм-аут браузера пытается загрузить изображения - PullRequest
0 голосов
/ 26 мая 2010

У меня есть страница в веб-приложении, содержащая около 13 изображений, сгенерированных моим приложением, которые написаны в фреймворке Kohana PHP. Изображения на самом деле являются графиками. Они кэшируются, поэтому они генерируются только один раз, но при первом посещении страницы пользователем все изображения должны быть сгенерированы, примерно половина изображений не загружается в браузер. После того как страница была запрошена один раз и изображения кэшированы, все они успешно загружаются.

При проведении специального тестирования, если я загружаю отдельное изображение в браузер, загрузка пустого кэша занимает 450-700 мс (я проверил это с помощью функции отслеживания ресурсов Google Chrome). Для справки, загрузка кэшированного изображения занимает около 90-150 мс.

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

Мои вопросы:

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

Как я уже говорил, приложение находится в фреймворке Kohana PHP и работает на Apache. Кроме того, я решил эту проблему на данный момент, извлекая страницу, как только данные становятся доступными (они поступают из пакетного процесса), так что изображения всегда кэшируются к тому времени, когда пользователь их видит. Для меня это похоже на грязное решение, и мне любопытно, что на самом деле происходит.


Редактировать : Комментатор попросил просмотреть заголовки для запроса:

Запрос

URL запроса: http://domain.com/charts/chart_name/1234/
Способ запроса: GET
Код состояния: 200 ОК

Заголовки запроса

Cache-Control: max-age = 0
Рефере: http://domain.com/home/chart_page
Пользователь-агент: Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_8; ru-ru) AppleWebKit / 533,4 (KHTML, как Gecko) Chrome / 5.0.375.55 Safari / 533.4

Заголовки ответа

Cache-Control: нет хранилища, нет кэша, необходимо подтвердить заново, пост-проверка = 0, предварительная проверка = 0
Подключение: Keep-Alive
Длина контента: 6354
Тип контента: изображение / png
Дата: среда, 26 мая 2010 г. 21:10:45 GMT
Истекает: четверг, 19 ноября 1981 года, 08:52:00 по Гринвичу
Keep-Alive: тайм-аут = 15, максимум = 94
Прагма: без кеша
Сервер: Apache
X-Powered-By: PHP / 5.3.1

С кэшированным изображением единственная разница в заголовках ответа:

Длина содержимого: 1129
Keep-Alive: тайм-аут = 15, максимум = 96

Я смотрю на странную разницу в длине контента, поскольку он должен быть точно таким же. Я понимаю, что это, вероятно, не оптимизировано с точки зрения того, чтобы браузер кэшировал изображение, но как только изображение генерируется один раз, вся загрузка страницы (включая загрузку изображений, скриптов и т. Д.) Занимает около 1-2 секунд. Без изображений, кэшированных на сервере, загрузка страницы занимает 20-30 с, а некоторые изображения вообще не загружаются.

1 Ответ

0 голосов
/ 30 мая 2010

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

...