如何在Rails 5.2资产管道中组织文件?

时间:2019-06-12 08:05:25

标签: asset-pipeline ruby-on-rails-5.2

我了解资产管道如何获取清单中说明的文件并对其进行预处理,将它们连接成一个文件,然后压缩该文件以加快下载速度。

在我的应用程序中,我有几个不同的部分,其中有不同的依赖项。

在我的资产中,我为这三个部分创建了三个目录:

stylesheets
  application.scss  -manifest for common elements such as bootstrap

  proofreaders
   index.scss  -manifest file for this section
   p_dashboard.scss

  clients
   index.scss -manifest file for this section
   c_dashboard.scss

  frontend
    index.scss -manifest file for this section
    custom.scss

我已将文件添加到config / initializeres / assets.rb文件:

Rails.application.config.assets.precompile += %w(proofreaders/index.css clients/index.scss frontend/index.scss)

这是我的application.scss清单文件中的示例:

@import "bootstrap";
@import "font-awesome";
@import "fonts";
@import "variables";
@import "utilities";
@import "bootstrap-overrides";
@import "animations";
@import "custom";

在我的校对者布局文件中,我具有以下内容:

doctype html
html
  head
    meta content=("text/html; charset=UTF-8") http-equiv="Content-Type" /
    title Dashboard
    = csrf_meta_tags
    = stylesheet_link_tag  'application', 'proofreaders', media: 'all', 'data-turbolinks-track': 'reload'

想法是,当用户第一次通过frontend部分进入站点时,他们将下载application.css压缩文件和frontend.css压缩文件。

然后,如果他们继续进行下一节,例如Proofreaders部分,则因为他们已经下载了application.css文件,因此应该将其缓存,因此不需要再次下载。

所以我的问题是,我对文件的组织方式以及浏览器/服务器将最大限度地减少下载的工作方式的理解是否正确?

如果没有,如果用户已经通过上一节下载了文件,是否有任何方法可以最大程度地减少文件的下载?

1 个答案:

答案 0 :(得分:0)

您的理解似乎是正确的。当我到达此处时,您将再创建3个清单文件并在所有布局/部分中加载应用程序,因此当用户从第一部分/布局进入站点时,应该下载application.css文件,并且不应再次发送请求。

尽管您可以确认环境资产配置(例如资产调试和编译模式)或缓存不应为null_store。

或如果一切正常,那么您也可以检查浏览器设置缓存。像在chrome中一样,您可以按CTRL + SHIFT + I,然后在网络菜单中检查已禁用的缓存选项。

希望您对此有所帮助。