6

我正在开发一个网页,其内容完全由客户端 JavaScript 生成。index.html 的唯一目的是引用 JavaScript 和 CSS 文档,它们是由 Rails 的资产管道生成的。为了避免额外的请求,我想在生产中内联那些 JavaScript 和 CSS。

如何内联使用资产管道生成的 JavaScript 和 CSS 内容?

4

3 回答 3

27

您可以使用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, 否则"会变成&quot;etc.

请注意,这不是压缩的;对于生产,您可能需要内联压缩代码。为此,请添加gem 'uglifier'到您的 Gemfile,运行 bundle,然后使用:

<%= raw Uglifier.new(:copyright => false).compile Rails.application.assets['application.js'].to_s %>
于 2012-12-10T12:25:10.850 回答
2

您还可以使用:Rails.application.assets.find_asset('api.css').to_s

于 2016-05-23T09:50:42.987 回答
0

您可能不想内联这些资产以提高生产性能。通过像 CloudFront 这样的 CDN 为它们提供服务并一路缓存它们,你可能会做得更好。

这应该比减少很少发出的 2 个 HTTP 请求提供更好的性能提升。

于 2012-11-21T01:51:26.793 回答