【问题标题】:Rails initializes extremely slow on ruby 1.9.1Rails 在 ruby​​ 1.9.1 上初始化非常慢
【发布时间】:2011-02-24 05:39:57
【问题描述】:

我刚刚在 ruby​​ 1.9.1 上运行了我的 rails 2.3.8 应用程序。要进入控制台,请启动 web 服务器,任何初始化 rails 的东西在 ruby​​ 1.9 中比在 ruby​​ 1.8.7 中花费的时间长 3 到 4 倍。我正在使用 ruby​​ 版本管理器,因此我可以轻松地在 ruby​​ 1.9 和 ruby​​ 1.8.7 之间切换。速度差异发生在生产和开发中。我想使用 1.9,因为一旦一切都运行起来,它必须更快,但是启动时间太糟糕了,应用程序在第一次请求时在 Heroku 上超时。

知道为什么 ruby​​ 1.9 会慢 3 到 4 倍吗?我一辈子都想不通。

【问题讨论】:

  • 或者弄清楚它把时间花在了哪里。
  • 我已经确认这个问题存在于一个新的 Rails 应用程序中。所以它绝对不是宝石或特定于应用程序的东西。
  • 当你说慢 3 - 4 倍时,它需要多长时间?如果 ruby​​1.9 需要 3 秒,而 ruby​​1.8 需要 1 秒,那么您可能遇到的问题与 ruby​​1.9 需要 60 秒而 ruby​​1.8 需要 20 秒不同!
  • 我注意到对我自己的应用程序的第一个请求也有大约 2 秒的延迟,但我认为这不会导致超时。 可能(这是一个非常暂定的“可能”)与 Rails 库中的“自动加载”与“要求”有关。 'autoload' 只会在访问关联的常量时加载给定的文件,所以它基本上是延迟加载。如果正在进行大量延迟加载,那可能正在做某事。如果只是 first 请求需要很长时间,这可能才是真正的问题。否则就直接不理我吧。
  • 本地也会出现这种情况吗?

标签: ruby-on-rails ruby performance startup ruby-1.9.1


【解决方案1】:

尝试使用 1.9.2-head 而不是 1.9.1。它是 Rails 3 的recommended version,所以你可能会有更好的运气。 Rails 2.3.8 在 1.9.2-head 上从我刚刚在本地运行的测试中启动得非常快(顺便说一句,也安装了 Authlogic)。

如果您使用的是RVM,请输入以下内容:

rvm install 1.9.2-head
rvm use 1.9.2-head

编辑:我用相同的应用程序尝试了 1.9.1 p378,启动时间大约需要 13 秒,而 1.9.2-head 需要 5 秒。 1.9.2-rc1 将于本月发布 I believe,所以这是个好消息 :)

【讨论】:

    【解决方案2】:

    这可能是因为 ruby​​ 1.9 使用 gem_prelude(它给你一个大的加载路径)而不是普通的 ruby​​gems。签出 $: 的长度 -- 每个需要搜索一次,导致额外的时间

    如果你想用旧方法,(升级到最新版本的 ruby​​gems 并)运行 ruby​​ --disable-gems

    如果您使用的是 Windows,请查看我的 faster_require gem。

    http://github.com/rdp/faster_require

    虽然我想,既然你提到了它,它可能对 1.9 Linux 有帮助。也许吧。

    GL! -rp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2012-05-30
      • 2011-10-27
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多