Находите неиспользуемые изображения в приложении Rails? - PullRequest
9 голосов
/ 23 декабря 2009

Я знаком с такими инструментами, как Дедвейт для поиска CSS, который не используется в вашем приложении Rails, но существует ли что-нибудь для изображений? Я сижу в проекте с огромным каталогом ресурсов от работы с различными дизайнерами, и я пытаюсь урезать жир в этом проекте. Особенно тяжело перемещать активы в наш CDN.

Есть мысли?

Ответы [ 4 ]

13 голосов
/ 06 января 2010

Это сильно зависит от кода, использующего изображения. Всегда возможно, что имя файла будет вычислено (путем объединения двух значений или подстановки строк и т. Д.), Поэтому простого поиска по имени файла не обязательно достаточно.

Вы можете попробовать запустить wget (возможно, уже установлен, если у вас есть машина Linux, в противном случае http://users.ugent.be/~bpuype/wget/), чтобы отразить весь ваш сайт. Сделайте это на той же машине или в сети, если сможете, она просканирует весь ваш сайт и захватит все изображения

# mirror mysite.com accepting only jpg, png and gif files
wget -A jpg,png,gif --mirror www.mysite.com

Как только вы это сделаете, у вас будет вторая копия иерархии вашего сайта, содержащая любые изображения, на которые активно ссылается любая страница, доступная при сканировании вашего сайта. Затем вы можете сделать резервную копию вашего исходного каталога изображений и заменить его на копию wget. Затем следите за вашими логами на 404, относящиеся к файлам gif / jpg / png. Надеюсь, это поможет.

11 голосов
/ 06 января 2010

Поиск незанятых изображений должен быть проще, чем CSS.

Просто найдите * .jpg * .png * gif с глобусом, поместите эти имена в словарь или массив и найдите эти имена снова в файлах html, css, js, удалите имя файла, если оно найдено, и вы получите неиспользуемый список, и переместите эти изображения в другую папку с такой же структурой каталогов (на всякий случай будет полезно восстановить)

В основном так и, конечно, для имен файлов, которые зашифрованы / закодированы / скрыты не будут работать.

require "fileutils"

img=Dir.glob("**/*.jpg")+Dir.glob("**/*.png")+Dir.glob("**/*.gif")
data=Dir.glob("**/*.htm*")+Dir.glob("**/*.css")+Dir.glob("**/*.js")

puts img.length.to_s+" images found & "+data.length.to_s+" files found to search against"

content=""
data.each do |f|
    content+=File.open(f, 'r').read   
end

img.each do |m|
    if not content=~ Regexp.new("\\b"+File.basename(m)+"\\b")
        FileUtils.mkdir_p "../unused/"+File.dirname(m)
        FileUtils.mv m,"../unused/"+m
        puts "Image "+m+" moved to ../unused/"+File.dirname(m)+" folder"
    end
end

PS: я использовал fileutils, потому что обычные makedirs и mv не работают в моей версии ruby ​​для Windows

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

Вот пример результатов, которые я запустил в корневой папке с образцами рельсов в моей Windows

---\ruby>ruby img_coverage.rb
5 images found & 12 files found to search against
Image depot/public/images/test.jpg moved to ../unused/depot/public/images folder
6 голосов
/ 07 января 2010

Если URL-адреса вашего изображения часто происходят из множества вычисленных / сцепленных строк и других вещей, которые трудно программно отследить в исходном коде, и ваше приложение интенсивно используется, вы можете попробовать мягкий подход "honeypot", например:

  • Переместить все активы в другой каталог, например, /attic
  • Установите пустой каталог /images (или как называется ваш каталог ресурсов)
  • Настройте файл .htaccess (если вы, конечно, на Apache), который, используя флаг -f, перенаправляет все запросы в несуществующие файлы изображений в скрипт
  • Сценарий копирует запрошенный файл из /attic в каталог /images и отображает его
  • Следующий запрос к этому изображению будет идти непосредственно к изображению, поскольку он существует сейчас

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

Конечно, это «мягкий» подход, потому что диалог / ситуация не могли быть открыты / введены / использованы ни одним пользователем в течение этого времени (например, такие как значки сообщений об ошибках). Но он распознает все используемые файлы, независимо от того, откуда они запрашиваются, и может помочь разобраться в большинстве ненужных файлов.

2 голосов
/ 07 января 2010

Если ваш файловый менеджер поддерживает это, попробуйте отсортировать каталог изображений по дате «последнего доступа» к файлам. Файлы, к которым давно не обращались, скорее всего, больше не используются.

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

...