Rails应用程序中用gzip压缩HTML输出的方法

211 阅读2分钟

典型的Rails应用程序的性能有多个方面:数据库查询、视图渲染时间、片段缓存,等等。前端也有一些考虑:图像压缩、Javascript和CSS大小。

我们经常对我们的应用程序使用的资产(图片、CSS和JS)使用CDN、压缩和粉碎。然而,许多主机(包括Heroku)默认不压缩由我们的应用程序生成的HTML。

请确保...

你使用Rack::Deflater ,用gzip压缩从你的应用程序发送的HTML输出。

config/application.rb

# ...
module DreamCoverage
  class Application < Rails::Application
    # ...
    config.middleware.use Rack::Deflater
    # ...
  end
end

为什么?

压缩 "基于文本 "的资源(即您的视图生成的HTML或JSON)是谷歌的标准性能建议之一。

在大多数情况下,基于文本的响应压缩的非常好。我曾在我们工作中的一些比较 "HTML重复 "的#index 行动上看到过20倍的压缩,但在较小的页面上通常是4倍。它对移动端的性能有更大的影响,因为网络是一个瓶颈。

如果你使用像TailwindCSSBootstrap或其他框架,导致HTML中重复的类名,你可能会发现惊人的节省。

这(很遗憾!)并不能免除你的其他性能工作。这些压缩的节省只发生在页面渲染之后,所以如果你的数据库查询很慢,或者你的视图需要很长的时间来生成,你仍然需要解决这些问题。

为什么不呢?

你完全有可能已经从CDN(如Fastly或Cloudflare)后面提供你的应用程序,该CDN会自动压缩你的HTML和JSON响应。在这些情况下,你将不需要Rack::Deflater

当你的用户的设备对响应进行解压时,处理时间会略有增加,但这远远超过了通过互联网发送压缩响应所节省的时间。