【问题标题】:Rails on Windows is so slow (rails -v takes 4 seconds)Windows 上的 Rails 太慢了(rails -v 需要 4 秒)
【发布时间】:2011-01-07 16:41:29
【问题描述】:

我在 Intel Core 2 Duo 2,6 Ghz 和 4 GB Ram 和 Windows Vista Business SP2 上使用 rails 版本 3.0.3 和 ruby​​ 版本 1.9.2p136 (2010-12-15),没有其他(重)运行的应用程序。我已经读过 Windows 上的 Rails 开发比 Unices 上的开发要慢,大多数人不推荐这样做,但这很愚蠢。

我想不出任何好的理由来使用 4 秒来显示一个简单的版本号。而且 rails generate 最多需要 10 秒才能完成!

我的设置一定有问题(至少我希望如此)。

有人知道如何进行吗?提前致谢!

【问题讨论】:

  • Windows 针对向后兼容性和功能列表进行了大量优化。不适用于动态类型、解释、运行时加载的脚本语言的性能。使用 Linux。如果你使用 VirtualBox,你可以在 Windows 的窗口中运行 Linux。
  • 在 Windows 上使用 Rails 几个月后,我在 VirtualBox 中使用 Ubuntu。到目前为止很棒。但我完全同意,Windows 用户在谈到 Rails 时经常被冷落是荒谬的,在较小程度上 Ruby。
  • 而且,我在 Ubuntu VM 中托管所有 Rails 内容,但所有代码都存储在 Windows 主机中,所有编辑都在 Windows 上。
  • @Justice,Windows 与优化“动态类型、解释、运行时加载的脚本语言”无关。 Ruby 只是另一个可执行程序。如果您认为我错了,请指出我的一些资源。
  • 我认为人们在用“切换到 linux”回答类似问题时应该 stfu。这对任何人有什么帮助?

标签: ruby-on-rails ruby windows windows-vista


【解决方案1】:

有几个关键点结合在一起会产生您注意到的缓慢性能。

  • Ruby IO 性能(在任何版本上)比 Linux 同类产品慢 3 倍。这是因为 Ruby 的 Windows 代码库中有几个未优化的跃点。这需要进一步分析、调查和优化,直到今天才完成。
  • Ruby 1.9.2 会为每个文件生成多个stat() 调用,这会增加 Ruby 本身的速度。这在 Ruby 1.8.6 或 1.8.7 中不存在。这在尚未发布的 Ruby 1.9.3(主干)中也得到了解决。
  • 像 Rails 这样的项目需要大约 500 个文件,结合以上几点,Ruby for Windows 成为了很多人眼中的蜗牛。

现在,有一些解决方法,一些简单的和一些复杂的。

  1. 回到 Ruby 1.8.7 而不是 Ruby 1.9.2。这将再次为您的应用程序带来一定程度的速度。除非您利用 Unicode 支持,否则 1.8.7 可以为您工作。
  2. 研究像 Spork 这样的工具,为您的 RSpec/Cucumber 提供场景/分叉
  3. 使用像ImDisk 这样的RAMDisk 将您的开发转移到RAM。将 Ruby 和您的应用程序都移到其中,加载时间将减少(这也与您的可用 RAM 相关)

希望其中一些选项对您有所帮助。

【讨论】:

  • 使用 1.8.7 将“rails -v”的时间减少到一秒以下。它真的更快。谢谢。
  • 只是为了节省一些时间:ImDisk 可能对您在 Ruby 1.9.3 上的数字没有任何影响。我们有一组测试在 Linux 上需要 100 秒,但在 Windows、ram 磁盘或没有 ram 磁盘上仍然需要 2000 多秒。
  • @Jason 提到的改进是关于启动时间,而不是运行时间。如果您的测试过于 I/O 绑定(网络、数据库等),那么它们仍然需要很长时间才能完成)。幸运的是 Ruby 2.0 获得了性能补丁,因此启动速度会更快。
  • 不是测试,而是数量(超过 800 个)。一种理论是它与加载所有代码/宝石以运行测试有关。 ImDisk 根本没有帮助,但 Xavier 的补丁 (rhnh.net/2011/05/28/speeding-up-rails-startup-time) 让我得到了大约 4 倍的改进。硬盘与 ImDisk 的差异不到 1%。
  • 我建议你看一下:gist.github.com/3242245 这已合并到 Ruby 2.0 中,这样可以缓解 Windows 上显示的大多数性能问题。您可以下载 Ruby 2.0 的自动构建,如下所示:gist.github.com/3251384
【解决方案2】:

在 Ubuntu 虚拟机中使用 Ruby 比直接在 Windows 中使用要快。

一个不错的选择是使用 Vagrant:您在 Windows IDE 上开发,文件与 Ubuntu VM“共享”,您运行“vagrant ssh”,然后运行“rails server”,或任何其他您想要的命令喜欢跑步。还有其他好处:

  • 您不需要安装 RVM 或切换 ruby​​ 版本,只需为每个项目使用一个 VM。虚拟机可以很小,比如 500MB 的数据,最多使用 100MB 的 RAM,但 YMMV
  • 您无需担心 gem 与 Windows 的兼容性

看一看:http://www.vagrantup.com/

【讨论】:

    【解决方案3】:

    为了加快速度,你可以试试我的 loader speeder upper(帮助 rails 在 Windows 中运行得更快):https://github.com/rdp/faster_require

    还有 checkout spork,它在 Windows 中运行,jruby 也运行良好。

    【讨论】:

    • 我使用了它,它使rake -T 从 4.3m 变为 13.2m!它使一切变慢。使用全局安装。
    • 回到过去,情况正好相反。至少对于 Windows,gl!
    【解决方案4】:

    您可以尝试使用 ruby​​ 的垃圾收集器来使 ruby​​ 更快,因为默认变量设置与 windows 的工作方式不匹配

    还有Garbage collector performance tuning

    【讨论】:

      【解决方案5】:

      很可能是防病毒软件影响了它。这与 Vista 的速度问题相结合可能正在影响它。我同意 Justice 的观点,在 VM 中运行 Linux。

      【讨论】:

      • 谢谢。如果我迁移到 Windows 7 会带来一些缓解吗?我只是想玩一下,因此安装一个完整的 ubuntu 有点矫枉过正。如果我的编程变得越来越严肃,我会考虑这一点。 :-)
      • 也许吧,因为 Windows 7 肯定要快一些。
      • 这是真的!虽然它不能完全解决问题,但禁用防病毒软件肯定会加快 Rails 的速度。尤其是生成速度非常慢但现在可以接受的命令。
      • 这个答案让我感到恐惧。关闭防病毒软件不是解决方案。曾经。此外,即使在 2011 年,Vista 也不再存在速度问题,这要归功于无数的 Service Pack。
      • 如果您能提供带和不带防病毒软件的时间而不是推测,那就太好了。那么这将是一个真正的答案而不是评论。
      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 2014-02-24
      • 2018-11-07
      • 2013-12-30
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多