Поиск неиспользуемых изображений в приложении Rails?

StackOverflow https://stackoverflow.com/questions/1949771

  •  21-09-2019
  •  | 
  •  

Вопрос

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

Есть какие-нибудь мысли?

Это было полезно?

Решение

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

Вы могли бы попробовать запустить 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.Надеюсь, это поможет.

Другие советы

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

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

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

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

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

Вот пример результатов, которые я запустил в корневой папке папки sample rails в моей 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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top