Ruby on rails 资产中的脚本文件越少越好吗?

Ruby on rails 资产中的脚本文件越少越好吗?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,鉴于: 资产管道相当复杂(来自ASP.NET MVC,这是 要复杂得多): 所有js文件都将加载到每个页面和每个“准备就绪”页面上 将执行每个文件中的jquery方法 将应用程序的javascript划分为“区域”——一个js文件用于站点的用户/公共区域,一个文件用于站点的管理区域,等等,这是否更有意义。来自外部站点(jquery、组织中的其他站点)的脚本不会真正应用 我看到的好处是 性能:由于TCP/IP开销,加载一个80kb文件比加载4个20kb文件快得多()。在生产环境中,所有的公

鉴于:

  • 资产管道相当复杂(来自ASP.NET MVC,这是 要复杂得多):
  • 所有js文件都将加载到每个页面和每个“准备就绪”页面上 将执行每个文件中的jquery方法
将应用程序的javascript划分为“区域”——一个js文件用于站点的用户/公共区域,一个文件用于站点的管理区域,等等,这是否更有意义。来自外部站点(jquery、组织中的其他站点)的脚本不会真正应用

我看到的好处是

  • 性能:由于TCP/IP开销,加载一个80kb文件比加载4个20kb文件快得多()。在生产环境中,所有的公共js都将被编译成一个文件,并在每个请求中提供服务,但我看到在该文件中包含“admin”代码的缺点

  • 安全性:脚本文件中可能有一些东西我不想暴露给未经授权的用户。诚然,如果它在脚本中是不安全的,但是如果我可以最小化诸如执行数据库维护的控制器操作的路径之类的内容的暴露,那就太好了

  • 开发的简单性:如果on ready事件将从每个文件中触发,那么将其放在一个文件中对我来说是有意义的,这样我就不必加载每个文件来查看其中的on ready。子区域的js(比如admin)自然会位于一个独立的文件中,而不是来自资产


相关:

将管理员javascript与其他javascript分离听起来是个好主意

那篇关于性能的文章绝对正确。我还没有看到在一个文件中缓存尽可能多的javascript并不是性能赢家的情况。即使这些区域不共享javascript,一次下载一个更大的文件往往比多次下载要快

如果您有很多库和特定于1页的javascript文件,那么缓存所有库可能是有意义的,只需确保在测试时测量典型用户的缓存命中率

有一些模式可以用来最小化重载问题。对我来说,将事物分解成模块,并仅基于特征检测初始化这些模块是一种有效的方法

例如,如果我有一个
UserInfo
模块:

!function(ns) {
  ns.init = function() {
    ns.setup_login()
    ns.show_user_info()
  }
  ns.setup_login = function() { /* blah-blah */ }
  // ... etc
}.call(this, this.UserInfo={})
如果页面上有一些与登录相关的html:

<div id="user_login">
  <div class="user_info"></div>
  <div class="login_links"></div>
</div>

如果没有这个模式,我会分别编写加载调用到
setup\u login
show\u user\u info
。通常这让我可以根据我在页面上检测到的方面初始化几个不同的模块,如果您根据这些模块的依赖项对它们进行分组,通常会将其缩减得更多。(我可能已经做了
User.init
->
UserInfo.init
,因为也许我可以假设
UserInfo
取决于
User

你有一篇文章解释如何进行拆分吗?我想多读一点。
$(function() {
  $("#user_login").each(function() { UserInfo.init() })
})