Я знаком с инструментами как Полная грузоподъемность судна для нахождения CSS, не используемого в Вашем приложении для направляющих, но что-нибудь существует для изображений? Я сижу в проекте с крупным каталогом активов от работы со множеством разработчиков, и я пытаюсь обрезать жир в этом проекте. Это - особенно боль когда движущиеся активы к нашему 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 с помощью глобуса, поместите эти имена файлов в словарь или массив и найдите эти имена снова в 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
не работают в моей оконной версии рубина
И я не очень хорошо разбираюсь в рубине, так что, пожалуйста, дважды проверьте его перед использованием.
Вот примеры результатов, которые я использовал в корневой папке 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-адреса ваших изображений часто поступают из множества вычисляемых / конкатенированных строк и других вещей, которые трудно отслеживать программно в исходном коде, и ваше приложение активно используется, вы можете попробовать мягкий подход «приманки», например:
/ attic
/ images
(или то, как называется ваш каталог ресурсов). .htaccess
(если вы на Apache, конечно), который с помощью флага -f
перенаправляет все запросы к несуществующим файлам изображений в сценарий / чердак
в каталог / images
и отображает его После некоторого времени и достаточного использования все необходимые изображения должны были быть скопированы в каталог ресурсов.
Это, конечно, «мягкий» подход, потому что диалог / ситуация не могли быть открыты / введены / использованы любым пользователем в течение этого времени (например, значки сообщений об ошибках). Но он распознает все используемые файлы, независимо от того, откуда они запрашиваются, и может помочь отсортировать большую часть ненужных файлов.