Как мне кэшировать граватары в Rails 3.2? - PullRequest
0 голосов
/ 25 февраля 2012

Я написал помощник по граватару для использования в моем учебном приложении. Действие «Индекс # пользователей» перечисляет всех пользователей с их граватарами, что может занять некоторое время даже при разбивке на страницы. Есть ли способ кешировать граватары в Rails 3.2, имея в виду следующее:

  1. Без использования плагина Gravatar, который имеет функцию кэширования.
  2. Без кэширования самой страницы пользователя; на самом деле, я только пытаюсь кэшировать сами изображения без необходимости снова получать их с сайта gravatar.com.

    def gravatar_for(user, options = { size: 50 })  
        gravatar_id  = Digest::MD5::hexdigest(user.email.downcase)
        size = options[:size]
        gravatar_url = "http://gravatar.com/avatar/#{gravatar_id}.png?s=#{size}"
        image_tag(gravatar_url, alt: user.name)
    end
    

Ответы [ 3 ]

2 голосов
/ 26 июля 2012

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

Для повышения производительности вы можете сделать следующее:

  • При работе в рабочем режимепри правильной настройке управления кешем браузер выполнит для вас некоторое кеширование изображений (может быть, я посмотрю на них, эпизод 321, я думаю)
  • Включите размеры изображения в тег img, браузер оставит за собойпространство на экране даже до того, как изображение становится доступным, оно делает меньше перерисовок и чувствует себя более оживленным
  • обслуживает ваш собственный заполнитель вместо более дорогих идентификаторов и т. д.
2 голосов
/ 25 февраля 2012

Мой вопрос: зачем тебе это? Вы помещаете изображение с внешнего сервера и пользовательский браузер, а gravatar.com должен его кешировать. Это причина, почему существует граватар, для управления аватарами без какой-либо работы со стороны разработчика. Если вам нужно кэшировать граватары, тогда зачем вам это нужно?

1 голос
/ 25 февраля 2012

Кэширование всей страницы пользователя или фрагмента, кэширование URL-адресов изображений в любом случае не будет иметь значения, поскольку изображения все равно будут загружаться из Gravatar. У Gravatar максимальный возраст заголовка Cache-Control - 5 минут, и с этим ничего не поделаешь.

Одна из возможностей - сохранить изображения в другом месте, где вы можете контролировать заголовки ответа.

Одна небольшая вещь, которую вы могли бы сделать во время разработки, это не использовать жесткое обновление на ваших страницах. В некоторых браузерах CMD/CTRL + R или нажатие кнопки обновления отправляет заголовки запроса с Cache-Control:max-age=0, что приводит к повторной загрузке всех изображений. Вы можете выполнить мягкое обновление, просто зайдя на страницу снова (например, нажав клавишу ввода по URL-адресу в адресной строке), и заголовок не будет отправлен.

...