在Rails生产中,config.assets.install=true,为什么不呢?

在Rails生产中,config.assets.install=true,为什么不呢?

安装的默认Rails应用程序rails newconfig.assets.compile = false在生产中。

做事情的最普通的方法就是跑rake assets:precompile在部署应用程序之前,要确保编译了所有资产管道资产。

如果我设置config.assets.compile = true在生产中?

我不需要跑precompile更多。我相信第一次请求资产时,就会对其进行编译。这将是第一次对性能的影响(这意味着您通常需要在生产中使用js运行时才能做到这一点)。但除了这些缺点之外,在资产被懒散地汇编之后,我所有对该资产的后续访问都将具有性能命中,该应用程序的性能将是完全一样与预编译资产一样,在这个初始的第一次延迟编译之后。这是真的吗?

我遗漏了什么吗?任何其他不应设置的理由config.assets.compile = true在生产中?如果我在生产中有一个JS运行时,并且愿意为第一访问资产,以换取不必运行precompile这有道理吗?


桃花长相依
浏览 584回答 3
3回答

智慧大石

指南是我写的。您肯定不想活在生产中编译。当您进行编译时,会发生这样的情况:对/Asset中的文件的每个请求都传递给链轮。在第一在Rails用于缓存(通常是文件系统)的任何资源中编译和缓存每个资产的请求。在随后的请求中,链轮接收到请求,并必须查找指纹文件名,检查构成资产的文件(图像)或文件(CSS和js)没有被修改,如果存在缓存版本,则提供该文件。那是一切在“资产”文件夹中和在插件使用的任何供应商/资产文件夹中。这是很大的开销,因为,老实说,代码并不是为了速度而优化的。这将对资产传输到客户端的速度产生影响,并会对站点的页面加载时间产生负面影响。与默认情况相比:当资产预编译和编译关闭时,将对资产进行编译,并将其指纹到public/assets..链轮将普通文件名到指纹文件名的映射表返回给Rails,Rails将其写入文件系统。清单文件(Rails 3中的yml或Rails 4中具有随机名称的JSON)在启动时由Rails加载到内存中,并被缓存以供资产助手方法使用。这使得具有正确指纹资产的页面生成非常快,而文件本身的服务则是从文件系统中快速生成Web服务器。两者都比实时编译快得多。要获得管道和指纹的最大优势,您需要在Web服务器上设置未来的头文件,并为js和css文件启用gzip压缩。链轮编写gzip版本的资产,您可以设置您的服务器使用,消除了它这样做的需要,为每个请求。这将尽可能快地将资产分发给客户端,并且在尽可能小的大小下,加快页面的客户端显示速度,并减少(具有遥远未来的头)请求。因此,如果您正在进行实时编译,则如下所示:很慢缺乏压缩将影响页的呈现时间。对决越快越好压缩删除从服务器无意中听到的压缩(可选)。尽量减少页面的呈现时间。编辑:(回复后续评论)管道能更改为在第一个请求时预编译,但这样做有一些主要障碍。首先,必须有一个查表来查找指纹名称,否则助手方法太慢。在按需编译的情况下,在编译或请求每个新资产时,需要有一些方式来附加到查找表。此外,在所有资产汇编到位之前,有些人将不得不在一段未知的时期内支付缓慢交付资产的代价。默认情况下,编译所有内容的代价是一次性支付的,它不会影响公众访问者,并确保一切在事情开始运行之前都能正常工作。打破这一协议的原因是,它给生产系统增加了许多复杂性。如果您正在阅读这篇文章,因为您正在为部署过程中的缓慢编译时间寻找解决方案,那么您可以考虑在本地预编译这些资产。有关这方面的信息,请参阅资产管道指南..这允许您只在发生更改时在本地预编译,提交该更改,然后在没有预编译阶段的情况下进行快速部署。

慕码人8056858

减少预编译的开销。Precompile&nbsp;everything&nbsp;initially&nbsp;with&nbsp;these&nbsp;settings&nbsp;in&nbsp;production.rb#&nbsp;Precompile&nbsp;*all*&nbsp;assets,&nbsp;except&nbsp;those&nbsp;that&nbsp;start&nbsp;with&nbsp;underscoreconfig. assets.precompile&nbsp;<<&nbsp;/(^[^_\/]|\/[^_])[^\/]*$/然后,您可以简单地将图像和样式表作为*.html.erb或“/Asset/web.png”中的“/Asset/样式表.css”使用。

HUWWW

任何使用Heroku的人:如果部署到赫库,如果未包含已编译的资产,它将在部署期间自动为您进行预编译。public/assets(没有承诺)所以不需要config.assets.compile = true,或者提交预编译资产。Heroku的文档是这里..一个CDN建议删除dyno资源上的负载。
打开App,查看更多内容
随时随地看视频慕课网APP