我一直在使用Google PageSpeed来优化我的Rails 5.0应用程序,特别是SVG的奇怪之处。我使用Rack::Deflate
压缩静态资产,如此......
配置/ application.rb中
config.middleware.use Rack::Deflater
...然而谷歌PageSpeed却抱怨正在服务的未压缩SVG。
我认为这很奇怪,所以我添加了一些code来手动压缩SVG作为资产预编译的一部分。这很有效,我可以去http://myapp.com/sample_image.svg.gz,实际上我得到了压缩的图像文件。
但是,Google PageSpeed 仍在抱怨所投放的未压缩资产。
看起来,就像Rails 5.0不是压缩我的SVG一样,当我手动压缩它们时,它仍然不会提供它们。
我需要在这里调整某种配置才能正确提供压缩的SVG文件吗?
答案 0 :(得分:2)
我开始discussion关于如何以全面的方式解决这个问题,因为这似乎也影响了字体&链轮将压缩的json文件,但ActionDispatch :: Static不会服务。无论如何,这是一个通过monkeypatch(放入初始化器)的解决方案:
require 'action_dispatch/middleware/static'
ActionDispatch::FileHandler.class_eval do
private
def gzip_file_path(path)
return false if ['image/png', 'image/jpeg', 'image/gif'].include? content_type(path)
gzip_path = "#{path}.gz"
if File.exist?(File.join(@root, ::Rack::Utils.unescape_path(gzip_path)))
gzip_path
else
false
end
end
end
答案 1 :(得分:1)
Rails 6.1 仍然如此。我已经做了一个 PR 来解决这个问题:https://github.com/rails/rails/pull/42407