在为网站中的特定网页编写javascript时,您希望何时将javascript转换为函数并将其包含在application.js
中?
我已经看到了建议about doing this(以及缩小或gzip-ing)以最小化HTTP请求。这是有道理的,但可维护性呢?如果我有一个特定于一个视图的js代码,那么查看潜在的大量application.js
似乎更多的工作。该代码可以嵌入到该视图中,也可以放在该视图文件夹中自己的.js
(或.js.erb
或.rjs
)文件中。
我见过另一个suggestion,Rails会自动将所有javascript合并到一个文件中。这是真的吗?
TLDR:开发人员在编写javascript时担心优化需要多少或多少?
答案 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文件。
回答我自己的问题
.../assets/javascripts/
中的子文件夹可以当且仅当子文件夹路径包含在清单中时。
//= subfolder/js_file
放入清单中即可。如果//= js_file
位于js_file
.../javascripts/subfolder/
/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)