Поиск неиспользуемых изображений в приложении Rails?
-
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 по журналам вашего веб-сервера и составить список файлов изображений, которые он обслуживал за последние несколько месяцев.Любые изображения, которых нет в этом списке, скорее всего, не используются.