我很熟悉像Deadweight这样的工具来查找你的Rails应用程序中没有使用的CSS,但是有没有针对图像的工具呢?我正坐在一个拥有大量资产目录的项目中,这些资产来自于与各种设计师的合作,我正试图在这个项目中裁员。当将资产转移到我们的CDN时,这尤其令人头疼。
有什么想法吗?
发布于 2010-01-06 10:32:59
这在很大程度上取决于使用图像的代码。计算文件名总是有可能的(通过连接两个值或字符串替换等方式),所以简单的按文件名计算是不够的。
您可以尝试运行wget (如果您有一台linux机器,则可能已经安装了wget,否则为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日志文件。希望这能有所帮助。
发布于 2010-01-06 10:03:30
查找未使用CSS的图像应该比CSS更容易。
只需使用glob找到*.jpg *.png *gif,将这些文件名放到字典或数组中,然后找到那些文件名,然后再找出html、css、js文件,如果找到了文件名,就会得到未使用的列表,然后将这些图像移到另一个具有相同目录结构的文件夹中(这将有助于恢复,以防万一)。
基本上是这样的,当然对于文件名来说,encrypted/encoded/obcuscated不会工作。
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
endPS:我使用了fileutils,因为普通的makedirs和mv在我的windows版本的ruby中是不能工作的
而且我不擅长ruby,所以在使用之前请仔细检查一下。
下面是我在窗口中示例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发布于 2010-01-07 06:39:19
如果您的图像URL经常来自许多计算/连接字符串和其他难以在源代码中以编程方式跟踪的内容,并且您的应用程序正在频繁使用,您可以尝试一种软的“蜜罐”方法,如下所示:
/attic/images目录(或您的资产目录的名称).htaccess文件(当然,如果您使用的是Apache ),该文件使用-f标志将对不存在的图像文件的所有请求重定向到脚本<代码>H212<代码>H113脚本<代码>E114将请求的文件<代码>E215从<代码>D16复制到<代码>D17目录中,并显示它<代码>H218<代码><代码>H119<代码>E120>对该图像的下一个请求将直接转到图像<代码>E221因为它现在已经存在了经过一段时间和充分的使用之后,所有需要的图像都应该已经复制到了资源目录中。
当然,这是一种“软”方法,因为在此期间,任何用户都无法打开/输入/使用某个对话框/情景(例如,错误消息图标之类的东西)。但它将识别所有使用过的文件,无论它们是从哪里请求的,并可能帮助整理出许多不需要的文件。
https://stackoverflow.com/questions/1949771
复制相似问题