Rails 3:在哪里放javascript的好经验法则?

Eri*_* Hu 25 javascript optimization ruby-on-rails-3

在为网站中的特定页面编写javascript时,您何时想将javascript转换为函数并将其包含在内application.js

我已经看到了关于这样做(以及缩小或gzip-ing)的建议,以最小化HTTP请求.这是有道理的,但可维护性呢?如果我有一个特定于一个视图的js代码,那么看起来更有意义的是看一个潜在的大量application.js.该代码可以嵌入到该视图中,也可以放在该视图文件夹中的自己的.js(.js.erb.rjs)文件中.

我已经看到另一个建议,Rails会自动将所有javascript合并到一个文件中.这是真的?

TLDR:开发人员在编写javascript时担心优化需要多少或多少?

Eri*_* Hu 48

由于我在大约一个月内没有看到答案,我将尽我所能回答这个问题.

Rails 3.1(目前在候选版本4)引入了sprockets,它将rails项目中的所有javascript编译成一个文件.它甚至还带有缩小和压缩javascript的工具,以便将它们全部交付给客户端.

与sprockets相关的是Rails 3.1资产管道.据我所知,这是一个文件夹层次结构/抽象.Javascripts可以进入3个文件夹:

/apps/assets/javscripts/
特定于应用程序的Javascript文件,包括application.js.这应该只包含要包含在项目中的javascript文件的清单.该rails new工具将生成此文件并在清单中包含jquery.

/lib/assets/javascripts/
开发人员编写的Javascript文件更通用.(我的印象是,这将是您开发的javascript库放入多个应用程序)

/vendor/assets/javascripts/
第三方javascript文件(即JQuery,Modernizr)

这些文件夹中的所有文件都将显示在客户端内部/assets/,从而抽象出服务器端文件路径.我认为这是为了帮助开发人员组织javascript文件.

回答我自己的问题

  • 将javascript函数放入单独的文件中,逻辑分组.我的测试程序表明,内子文件夹.../assets/javascripts/都ok 当且仅当子文件夹路径包括在清单.
    • 放入//= subfolder/js_file清单的IE 将起作用.//= js_file如果js_file在里面就不会投入.../javascripts/subfolder/
    • DHH在他的演讲中提到了"13规则"(下面链接).如果文件夹中的javascripts数量超过13,则开始看起来很乱并且难以管理.这是将javascript文件分组到子文件夹的好时机.
  • 使用内置的Rails 3.1 minifier和压缩器(或安装一个首选的gem)
  • 不时重构javascript代码.将功能移动到/lib/assets/javascripts/一段时间.(目标是最终识别何时编写通用JavaScript函数而不是特定于应用程序的函数并消除此重构步骤)

更多资源

一篇博客文章,涵盖Rails 3.1中所有变化的内容
DHH关于Rails 3.1变化的讨论,2011年5月16日(~1小时)