6

我对 Rails 3.0.x(尤其是 Heroku)中管理资产的不同工具的优缺点很感兴趣。

关于这个主题已经有一些较老的问题,但同时也有一些新的工具可用。

我对这些工具特别感兴趣:

Jammit 似乎可以做 AssetHat 可以做的所有事情,而且可用时间更长。那么 AssetHat 适合在哪里呢?

Rack PageSpeed 似乎通过直接处理服务器响应来即时完成所有工作。你这样做有没有遇到任何性能问题?您会推荐它而不是其他两种解决方案吗?

4

3 回答 3

14

大家好,我是 AssetHat 的作者。缩小和连接是最容易实现的性能提升之一;这些功能对 Jammit、AssetHat 和 rack-pagespeed 是通用的。Rails 已经支持串联很长时间了(尽管它是在运行时完成的,而不是在部署期间完成的),而且 Rails 3.1 在部署期间支持缩小和串联也就不足为奇了。

其余功能使这些资产管理器中的每一个都变得有趣。例如,如果您想将图像和字体文件直接嵌入到样式表中,Jammit 就很有用。如果您想将所有优化保存在一个完全独立的层中,rack-pagespeed 也很方便。

将资产内联到 CSS 中非常适合样式表不经常更改的静态页面。但是,如果您的站点正在积极开发中,并且样式表发生了微小的变化,则用户的浏览器必须重新下载整个内容——包括可能没有更改的内联图像和字体。这取决于您的项目的性质。

如果您的资产太大而无法内联或连接,AssetHat 有助于优化 CDN 和并行加载:

  • 它充分利用了 CDN,无论是Google 的 CDNcdnjs(使用Amazon 的服务器)还是您选择的其他 CDN。例如,只需添加<%= include_js :jquery %>到您的布局(以及配置文件中的版本号)即可从 Google 的 CDN 加载 jQuery。如果您处于开发模式并且拥有 jQuery 的本地副本,则会加载它——轻松离线开发。
  • AssetHat 可以改写样式表的图像 URL 以使用您的 CDN。这从您的设置中读取config.action_controller.asset_host,并在部署时完成。您的原始 CSS 保持不变。
  • 如果要加载多个 JS 文件,有时并行加载它们比连接它们更快(即强制它们串行加载)。您可以轻松打开LABjs模式<%= include_js 'big-file-1', ..., 'big-file-n', :loader => :lab_js %>. 如果您在本地没有 LABjs 的副本,或者您正在生产中,则 LABjs 通过 cdnjs 从 Amazon 的服务器加载。

通过使用 Google 或 Amazon 之类的 CDN,您的用户可以并行加载更多资产(因为有更多主机名),享受更快的速度,有时甚至根本不需要下载资产(例如,如果他们已经加载了 Google 的 jQuery 副本)通过别人的网站)。

我在 Heroku 上使用了 AssetHat,方法是将我的部署脚本设置为简单地运行rake asset_hat:minify(以缩小和连接 CSS/JS),将这些更改提交到我的存储库,然后进行实际部署。

如果您还没有看过这些,您可能对以下内容感兴趣:

如果您需要设置帮助或有任何其他问题,请随时在 GitHub ( rondevera ) 或 Twitter ( @ronalddevera ) 上给我发消息。

于 2011-05-30T21:57:54.503 回答
1

据我所知,Jammit 不会在 Heroku 上开箱即用。一种选择似乎是使用 Heroku Jammit 插件来管理您的资产 - https://github.com/chebyte/heroku-jammit

或者,可以将Jammit配置为输出到 /tmp:http://geekninja.blogspot.com/2011/04/making-jammit-jam-with-heroku.html

Rails 3.1 将包含 Sprockets 来处理资产打包,我认为这值得考虑。

于 2011-05-30T22:24:04.927 回答
0

我目前在 heroku 上使用 jammit 以及 amazon s3,它就像一个魅力:)

关于其他工具我不能说太多,因为我没有使用过它们。

最后你选了哪一个?

费尔南多。

于 2011-07-25T14:55:56.853 回答