Есть ли способ создания спрайтов (спрайтов во время выполнения) в Rails 3.0? - PullRequest
1 голос
/ 26 июня 2011

Любая HTML-страница в моем проекте содержит два типа изображений:

  1. Изображения, которые определяются системой, такие как логотип, значки и кнопки
  2. Пользовательские изображения, такие как профиль пользователяизображение или логотип компании и т. д.

На странице списка обычно отображается комбинация обоих типов изображений.Теперь, с помощью Rails, я хочу, чтобы все изображения компилировались в один или два больших спрайта во время выполнения в зависимости от списка пользовательских изображений или списка значков / логотипов, отображаемых на данной странице.Делая это, я могу избежать использования тегов img и глубоко вложенных якорей, которые традиционно присутствуют в исходящем html.

Отправка пользовательских изображений с помощью фонового CSS происходит в X раз быстрее, чем теги img, и давайте я сохраню html / haml в чистоте.Также было бы замечательно, если бы кто-то также мог посоветовать мне вопросы кеширования при спрайте во время выполнения?(Если эта вещь существует, в первую очередь.)

1 Ответ

1 голос
/ 26 июня 2011

Я не знаю, как программно создавать спрайты в Ruby.Вы можете использовать библиотеку для манипулирования изображениями (возможно, FreeImage ), но это кажется довольно низким уровнем.Держите нас в курсе, если найдете что-нибудь, что может сделать это.

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

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

  • Дайте изображению уникальное имя каждый раз, когда оно воссоздается.В этом сценарии изображение никогда не истекает.Если он перестроен, ему присваивается новое имя, в результате чего браузер делает новый запрос на него.Я использовал это с успехом.Rails делает то же самое с вашими таблицами стилей и файлами javascript.

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

С этим вопросом можно ознакомиться здесь .

...