为站点中的特定页面编写javascript时,您希望何时将该javascript转换为函数并将其包含在application.js
中?
我看到了一些关于这样做(以及缩小或gzip)以最小化HTTP请求的建议。这是有道理的,但是可维护性呢?如果我有特定于一个视图的js代码,那么研究潜在的巨大application.js
似乎需要做更多的工作。该代码可以嵌入到该视图中,也可以放在该视图文件夹中自己的.js
(或.js.erb
或.rjs
)文件中。
我看到了另一个建议,Rails会自动将所有javascript合并到一个文件中。这是真的吗?
TLDR:开发人员在编写javascript时应该为优化担心多少?
由于我已经一个月没有看到答案了,我将尽我目前所知回答这个问题。
Rails3.1(目前是候选版本4)引入了链轮,它将把Rails项目中的所有javascript编译成一个文件。它甚至还附带了缩小和压缩javascript的工具,以便一次将其全部交付给客户端。
与链轮相关的是Rails 3.1资产管道。据我所知,这是一个文件夹层次结构/抽象。Javascript可以分为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/
中的子文件夹是可以的当且仅当子文件夹路径包含在清单中时。- I。E.将
//= subfolder/js_file
放入清单即可。如果js_file
在.../javascripts/subfolder/
内,则不会放入//= js_file
- DHH在他的演讲中提到了"13条规则"(链接如下)。如果一个文件夹中的javascript数量超过13,它就会开始显得混乱和难以管理。这将是将javascript文件分组到子文件夹中的好时机
- I。E.将
- 使用内置的Rails 3.1 minifier和压缩器(或安装首选gem)
- 不时重构javascript代码。随着时间的推移,将函数移动到
/lib/assets/javascripts/
。(目标是最终识别出何时需要编写通用javascript函数,而不是特定于应用程序的函数,并消除此重构步骤)
更多资源
一篇博客文章,介绍Rails 3.1中的所有更改
DHH关于Rails3.1更改的谈话,2011年5月16日(约1小时)