我熟悉诸如Deadweight 之类的用于查找 Rails 应用程序中未使用的 CSS 的工具,但是图像是否存在任何东西?我正坐在一个项目中,其中包含与各种设计师合作的大量资产目录,并且我正在尝试减少该项目中的脂肪。将资产转移到我们的 CDN 时尤其痛苦。
有什么想法吗?
我熟悉诸如Deadweight 之类的用于查找 Rails 应用程序中未使用的 CSS 的工具,但是图像是否存在任何东西?我正坐在一个项目中,其中包含与各种设计师合作的大量资产目录,并且我正在尝试减少该项目中的脂肪。将资产转移到我们的 CDN 时尤其痛苦。
有什么想法吗?
这很大程度上取决于使用图像的代码。总是有可能计算文件名(通过连接两个值或字符串替换等),因此简单地按文件名进行 grepping 不一定足够。
您可以尝试运行 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 的副本。接下来,监视与 gif/jpg/png 文件有关的 404 日志文件。希望有帮助。
查找 unsed 图像应该比 CSS 更容易。
只需使用 glob 找到 *.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
在我的 Windows 版本的 ruby 中不起作用
而且我不擅长红宝石,所以请在使用前仔细检查。
这是我在 Windows 的 sample rails 文件夹的根文件夹中运行的示例结果
---\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
标志,将所有对不存在的图像文件的请求重定向到脚本/attic
到/images
目录中并显示它经过一段时间和足够的使用后,所有需要的图像应该已经复制到资产目录。
这当然是一种“软”方法,因为在此期间任何用户都可能没有打开/输入/使用对话框/情况(例如错误消息图标之类的东西)。但它会识别所有使用过的文件,无论它们是从哪里请求的,并且可能有助于整理出许多不需要的文件。
如果您的文件管理器支持它,请尝试按文件的“上次访问”日期对图像目录进行排序。长时间未访问的文件很可能不再使用。
同样,您还可以通过 Web 服务器的日志进行过滤或 grep,并列出它在过去几个月中提供的图像文件。不在此列表中的任何图像都可能未使用。