我正在开发一个网页,其内容完全由客户端 JavaScript 生成。index.html 的唯一目的是引用 JavaScript 和 CSS 文档,它们是由 Rails 的资产管道生成的。为了避免额外的请求,我想在生产中内联那些 JavaScript 和 CSS。
如何内联使用资产管道生成的 JavaScript 和 CSS 内容?
我正在开发一个网页,其内容完全由客户端 JavaScript 生成。index.html 的唯一目的是引用 JavaScript 和 CSS 文档,它们是由 Rails 的资产管道生成的。为了避免额外的请求,我想在生产中内联那些 JavaScript 和 CSS。
如何内联使用资产管道生成的 JavaScript 和 CSS 内容?
您可以使用Rails.application.assets
预编译后获取资产的内容。将此添加到您的index.html.erb
:
<style type="text/css">
<%= raw Rails.application.assets['application.css'].to_s %>
</style>
<script type="text/javascript">
<%= raw Rails.application.assets['application.js'].to_s %>
</script>
不要忘记raw
, 否则"
会变成"
etc.
请注意,这不是压缩的;对于生产,您可能需要内联压缩代码。为此,请添加gem 'uglifier'
到您的 Gemfile,运行 bundle,然后使用:
<%= raw Uglifier.new(:copyright => false).compile Rails.application.assets['application.js'].to_s %>
您还可以使用:Rails.application.assets.find_asset('api.css').to_s
您可能不想内联这些资产以提高生产性能。通过像 CloudFront 这样的 CDN 为它们提供服务并一路缓存它们,你可能会做得更好。
这应该比减少很少发出的 2 个 HTTP 请求提供更好的性能提升。