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

时间:2011-06-09 02:27:20

标签: javascript ruby-on-rails-3 optimization

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

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

我见过另一个suggestion,Rails会自动将所有javascript合并到一个文件中。这是真的吗?

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

1 个答案:

答案 0 :(得分: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/中的子文件夹可以当且仅当子文件夹路径包含在清单中时。
    • 即。将//= subfolder/js_file放入清单中即可。如果//= js_file位于js_file
    • 内,则不会设置.../javascripts/subfolder/
    • DHH在他的演讲中提到了“13规则”(下面链接)。如果文件夹中的javascripts数量超过13,则开始看起来很乱并且难以管理。这是将javascript文件分组到子文件夹的好时机。
  • 使用内置的Rails 3.1缩小器和压缩器(或安装首选的宝石)
  • 不时重构javascript代码。随着时间的推移将函数移动到/lib/assets/javascripts/。 (目标是最终识别何时编写通用JavaScript函数而不是特定于应用程序的函数,并消除此重构步骤)

更多资源

a blog post covering all changes in Rails 3.1
DHH's talk on Rails 3.1 changes, May 16 2011 (~1 hr)