Хобрук: Ваш путь к мастерству в программировании

HTTP: какие заголовки лучше всего подходят для редко меняющихся изображений

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

Итак, я пытаюсь получить второе лучшее решение. Какие заголовки я должен отправить? Eтег? Истекает? Кэш-контроль? Прямо сейчас у меня есть:

http://metaward.com/media/award/ofwjh3.png

Last-Modified   Sat, 11 Jul 2009 22:37:49 GMT
Cache-Control   max-age=2592000
Expires Tue, 29 Sep 2009 22:41:21 GMT

И пример страницы с большим количеством изображений (чтобы показать, насколько медленно они загружаются, даже при кэшировании):

http://metaward.com/6

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


Ответы:


1

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

У вас действительно есть сотни изображений на странице, и вы должны их спрайтить. Возможно, есть несколько более распространенных (рекомендуемых вами), с которых вы можете начать, чтобы посмотреть, поможет ли это. Или, может быть, вы могли бы сделать спрайт тех, кто «наименее вероятно изменится».

30.08.2009
  • Под спрайтом вы подразумеваете преобразование их в карту изображения. Таким образом, у вас будет только одно большое изображение для загрузки, что сведет к минимуму количество HTTP-запросов, отправляемых на сервер, и ускорит загрузку. Это будет хорошо работать для ссылки, которую вы отправили, но не всегда может быть уместной. 31.08.2009
  • Вот ссылка на заголовок с истекающим сроком действия в далеком будущем: askapache.com/htaccess/apache- скорость-expires.html 31.08.2009
  • @ Мэтт Да. Поместите все изображения в один файл, а затем замостите его. Допустим, у вас есть тайлы 100x100. Если вы сделаете его фоновым изображением, CSS для строки 1 и столбца 2 будет выглядеть примерно так: background-position: -100, 0; ширина: 100; высота: 100; переполнение: скрыто. 31.08.2009
  • Ну, у меня есть 14 000 изображений размером 48x48. Каждая страница будет использовать только около 500 из них, но какие 500 изменений для каждого человека (у меня 300 000 человек). И больше людей и изображений добавляются программно. Думаешь, мне все еще стоит спрайтить их? 31.08.2009
  • да. Вы, вероятно, никогда не получите плавную загрузку 500 изображений. Браузер просто будет бороться с этим (по крайней мере, в ближайшем будущем). Я не знаю ваших данных. Вам придется разработать логическую стратегию. Идеи: (а) может быть, порядок не имеет значения, и вы можете спрайтить некоторые общие и всегда показывать их вверху страницы. Сначала страница будет открываться быстрее. (b) создать собственное изображение для каждого пользователя только с их спрайтами (вы можете проверить это, сделав снимок экрана существующей страницы) 31.08.2009

  • 2

    Кэширование может немного помочь, когда посетитель переходит из профиля в профиль, а обслуживание изображений из разных поддоменов с постоянными подключениями может помочь ускорить доставку, но настоящим убийцей производительности является просто количество HTTP-запросов. Если вы можете идентифицировать два или более изображений, которые появляются вместе более чем в 50% случаев, кажется, было бы целесообразно объединить их в спрайт в регулярно запланированном автономном процессе. Если позволяют ресурсы, можно даже использовать библиотеку обработки изображений, например. php-gd для объединения и обслуживания блоков изображений во время выполнения.

    31.08.2009
    Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

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