Webrick和Thin在Windows中提供静态文件的速度非常慢。我怎样才能加快它们的速度?

时间:2013-11-28 13:24:43

标签: windows ruby-on-rails-3 performance thin webrick

我目前正在开发一个网络应用程序,为此,我在Windows和Mac dev机器之间进行了交替。

我的问题是页面在Windows上缓慢地呈现非常,但这不是我的Ruby代码运行缓慢,而是静态文件的缓慢提供。

一个典型的页面需要大约200毫秒来渲染并在dev中提供服务(Mac和Windows在这里类似),但它包含大约50个静态文件(在生产中它只有5到10个,一旦它们被缩小和组合,但是在开发中他们仍然是分开的)。

这些50个文件在Mac上提供约1.5秒,但在Windows上约为 10秒。这使得测试事情变得非常曲折......

我尝试了Webrick和Thin,它们大致相同。

有没有人发现这个问题,知道如何改善这个问题?

我已经尝试将Webrick conf更改为“:DoNotReverseLookup => true”,如this answer中所述,但它没有帮助。

任何帮助将不胜感激 谢谢!
丹尼尔

3 个答案:

答案 0 :(得分:2)

你遇到了两个长期困扰Ruby开发人员的存在问题:

  • Webrick很慢。总是。只是不要打扰。
  • Ruby在Windows上总是比较慢。有时你发现了几个数量级。

因此,如果您坚持在Windows上进行开发(而不是仅在Linux上开发或在Windows上运行的Linux VM上开发),那么我们需要找出一些方法将口红放在猪身上。

一些想法:

  • 确保运行最新版本的Ruby。
  • 尝试使用Thin部署nginx,尽管这有助于tutorial。这将帮助您充分利用Thin的多线程和异步性。
  • 使用Capistrano通过此部署GitHub project进行部署。

如果您确定已经在不适合的环境中开发了足够的Rails,则可以按照here所述的方式设置VM。作者报告了显着的加速。

答案 1 :(得分:1)

在VirtualBox中使用Ubuntu VM,它可能更接近您的部署环境,然后是Mac和Windows,这意味着更少“但它在开发中工作”的麻烦。

此外,您将节省大量时间处理不同ruby / Gems实现的怪癖以及由于本机扩展而导致的各种级别的头痛。

你可以:

  1. 设置内部网络,以便您可以使用Windows下的浏览器浏览在VM中运行的应用程序
  2. 使用putty之类的东西来打开VM的控制台会话
  3. 与您的Ubuntu VM共享一个Dropbox / Sparkleshare文件夹,这样您在Windows和Mac框和Ubuntu VM之间总是有相同的代码
  4. 这使您可以在windows / macos下使用您喜欢的编辑器来编辑VM中的文件
  5. 您也可以在Mac下使用相同的VM
  6. VirtualBox下的Ubuntu安装快速,简单且文档齐全,它几乎只是一个向导。或者,你可以尝试找一个好的流浪食谱(见http://www.vagrantup.com/)或四处询问你的同事是否愿意分享他/她的vbox。

答案 2 :(得分:0)

我的开发性能下降(由于实时编译)与具有大量资产的项目一起工作,但我不在Windows上。

我认为在Windows下的某些低效资产编译可能会导致较大的性能差异。

我没有任何Windows开发经验,我很长一段时间没有使用Windows机器,但是当我切换到多台时,我在并行资产处理(开发中)中的性能显着提高了 - 线程服务器,特别是Puma。请记住,在任何情况下,默认的Rails网络服务器(Webrick)都是非常低效的。

作为Konstantine explained in this answer,目前有几种选择。您可以按处理模式对它们进行分组。

删除有关Ruby线程,多进程等的所有背景历史记录,我邀请您在您的计算机中尝试使用Puma,看看它是否能提高负载。

Puma在提供真正多线程的Ruby实现方面效果更好,但引用官方自述文件

  

在MRI上,有一个全局解释器锁(GIL),确保一次只能运行一个线程。但是,如果您正在进行大量阻止IO(例如对Twitter等外部API的HTTP调用),Puma仍然可以通过允许阻塞IO同时运行来提高MRI的吞吐量(基于EventMachine的服务器,如Thin)关闭此功能,要求您使用特殊库)。   Puma旨在为Rack应用程序提供简单而高性能的请求/响应管道。