【问题标题】:How does your rails app include javascript?您的 Rails 应用程序如何包含 javascript?
【发布时间】:2011-04-11 10:39:54
【问题描述】:

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

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

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

有人有什么建议可以分享吗?

非常感谢!

【问题讨论】:

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


    【解决方案1】:

    有几个权衡需要考虑:

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

    备注

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

    回答您的具体问题

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

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

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

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

    您使用什么工具或技术,例如:asset_packager、yui 压缩器、sprockets、受 BigPipe 启发的实现?

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

    【讨论】:

      【解决方案2】:

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

      另外,请查看 Yahoo 上关于快速网站最佳实践的这篇文章:http://developer.yahoo.com/performance/rules.html。此建议适用于所有网站,而不仅仅是 Rails。

      【讨论】:

        猜你喜欢
        • 2012-11-20
        • 2014-04-13
        • 2017-01-28
        • 2015-08-02
        • 2014-05-20
        • 2011-10-20
        • 2020-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多