你的rails应用程序如何包含javascript?

时间:2010-09-12 22:06:48

标签: javascript jquery ruby-on-rails ajax prototypejs

我很好奇你的Rails应用程序如何包含javascript。例如:

  • 您是否将所有js代码打包到一个文件中并为所有请求提供服务?
  • 你是否根据控制器/动作有条件地加载某些js?
  • 您使用什么工具或技术,即:asset_packager,yui压缩器,链轮,BigPipe启发实现?

一些背景知识:我正在开发一个非常JS的大型Rails应用程序。目前,所有js都被缩小并从单个文件中提供。这使得事情变得非常方便,因为所有框架和小部件都可以在任何地方使用。我开始质疑这种方法是让所有用户付出他们可能永远看不到的一些js的价格似乎有点疯狂。由于网站的大部分内容通过ajax提供内容,因此使用脚本包含乱码代码似乎很糟糕且困难。

有人建议分享吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

需要考虑几个权衡因素:

  • 如果您有一个大的JS文件,则应该为所有页面缓存它。但如果只有几页使用JS那么这就不好了。
  • 如果您的页面不共享JS,那么您可能希望为每个页面的单个JS使用“按需”加载。但是你不需要太多的负载,因为每个JS fetch都有自己的开销。

备注

  • 确保所有JS都将永久缓存在您的客户端上。在文件名或URL(foo.js?123)
  • 中使用版本号
  • 确保JS文件最小化。
  • 确保Web服务器已启用gzip编码。
  • 您可能希望为您的JS使用低成本的内容分发网络,例如亚马逊的Cloudfront或其竞争对手之一。

您的具体问题的答案

您是否将所有js代码打包到一个文件中并为所有请求提供服务?

所有请求都获得一个JS的大文件,其中包含库代码和大多数页面使用的JS。某些特定页面还会获得一个额外的JS文件。

你是否根据控制器/动作有条件地加载某些js?

是的,对于一些非常繁重的JS页面,这些页面会获得额外的JS文件。所有页面都获得了reg JS文件,并且它被缓存/可用于所有页面。

您使用哪些工具或技术,即:asset_packager,yui压缩器,链轮,BigPipe启发实现?

  • YUI Compressor
  • S3用于提供我的assets.foo.com域
  • rake任务合并/最小化多个JS源文件

答案 1 :(得分:1)

首先,尝试使用Firefox的这个插件:http://developer.yahoo.com/yslow/。它将帮助您确定缓慢的来源,并可以分析您的脚本使用情况并提出改进建议。

另外,请查看雅虎关于快速网站最佳做法的文章:http://developer.yahoo.com/performance/rules.html。此建议适用于所有网站,而不仅仅是rails。