Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 4.2资产加载_Ruby On Rails_Asset Pipeline_Ruby On Rails 4.2 - Fatal编程技术网

Ruby on rails rails 4.2资产加载

Ruby on rails rails 4.2资产加载,ruby-on-rails,asset-pipeline,ruby-on-rails-4.2,Ruby On Rails,Asset Pipeline,Ruby On Rails 4.2,我正在玩一个rails 4.2应用程序,它似乎加载了我每个页面的所有样式表 这是真的吗?它比只为每个页面加载相关的样式表更好吗 一方面,我知道它们在投入生产时都会被缩小,这将减少总大小并为整个网站缓存一个CSS 另一方面,PageI可能会有一些薄页面,这些页面只需要几行css就可以正确呈现,这样就可以无缘无故地获得文件的音调。它还要求我在选择类名时非常严格和安全,以避免冲突和不必要的重写 JS资产呢?它的作用是一样的吗? (我猜图像资产的答案是“该死的不!”)是的,在开发过程中,您会看到很多文件

我正在玩一个rails 4.2应用程序,它似乎加载了我每个页面的所有样式表

这是真的吗?它比只为每个页面加载相关的样式表更好吗

一方面,我知道它们在投入生产时都会被缩小,这将减少总大小并为整个网站缓存一个CSS

另一方面,PageI可能会有一些薄页面,这些页面只需要几行css就可以正确呈现,这样就可以无缘无故地获得文件的音调。它还要求我在选择类名时非常严格和安全,以避免冲突和不必要的重写

JS资产呢?它的作用是一样的吗?
(我猜图像资产的答案是“该死的不!”)

是的,在开发过程中,您会看到很多文件(全部),在生产过程中,它们将被编译并缩小为单个文件

一旦客户端下载了该文件,它将被缓存,并且不需要在并发请求时进一步请求加载其他样式表文件(除非已禁用缓存和TurboLink)。缺点是文件大小会变大,使初始加载时间稍长

正如您所指出的一个问题是范围界定。根据我的经验,在开发时总是应用适当的范围更好。在使用sass的rails中,很容易得到漂亮整洁的css

javascript也是如此,但正如您所指出的,图像不是这样

也就是说。如果需要的话,有很多方法可以解决这个问题,但是我经常意识到一个文件的优点多于缺点

编辑:

哦,如果您是rails新手,请注意turbolinks可能会在开始时让您头疼,在您掌握窍门之前,先搞乱js文件中的PageReady。但最终还是值得的。

这样做的好处和基本原理是减少加载第一页后发送给客户端的数据量。第一个页面加载会拉低所有js/css(编译成单个文件),但这样就可以缓存,并减少后续页面加载的数量

以下内容纯粹是理论性的,如果可能的话,尝试使用一个css/jss文件的默认值

如果你真的想修剪它,那么你可以。您的application.css清单文件(或js)可能包含一行,例如:

//= require_tree . 
也就是说,需要此目录中的所有内容。然后您可以将其拆分,以便application.css只需要application文件夹中的所有内容(绝对需要知道):

然后添加额外的清单文件,例如admin部分,以便只有在admin.JS中需要时才能加载admin styles/JS

//=require_tree ./admin
然后在布局文件中可以执行以下操作

= stylesheet_link_tag "application", media: "all" 
= yield :additional_stylesheets
您可以在需要这些附加样式的位置添加它们

- content_for :additional_stylesheets do 
   = stylesheet_link_tag "admin", media: "all" 
end
注意:如果您使用TurboLink,这将导致问题。 注二:您可能需要将这些添加到application.rb中的预编译列表中:

config.assets.precompile += ['additional_manifests.css'] 

您可以修改此工作流,使其一开始就不包含任何CSS,只加载您需要的内容。

是的,这是正确的。如果使用turbo链接和缓存,效果更好。有很多方法可以解决这个问题(见答案)
config.assets.precompile += ['additional_manifests.css']