为什么我的sinatra网站这么慢?

时间:2010-01-25 05:12:45

标签: performance sinatra

在询问this question,后,我开始使用Sinatra作为服务网页的方式。

今晚,我的一位朋友和我开始测试服务器的速度。

要登录的文件如下:

require 'rubygems'
require 'sinatra'
require 'haml'

enable :sessions #for cookies!

get '/' do 
  haml :index 
end

index.haml看起来像:

%title
  First Page

%header 
  %h2 First Page

他和我一样坐在最近的笔记本电脑上,我们两人之间有一台Apple 802.11n路由器。我们都在运行Windows 7.我还在运行Ubuntu 9.10 x64和Sinatra的笔记本电脑上尝试了这些相同的文件,并从apt-get安装了所有相关文件。

无论是服务器操作系统,Windows还是Linux,Sinatra都需要7秒钟来提供单页请求。我看到here作者设法获得了超过400个请求/秒处理。是什么赋予了? (或者这应该是在SuperUser之类的?)

4 个答案:

答案 0 :(得分:9)

我会就何时优化您的网络应用程序留下任何意见。

在Sinatra应用程序中设置不同的配置以进行开发和生产,因为其中一些建议,您并不总是想要使用。实际上,您应该继续进行设置和环境,类似于在生产中部署的方式。只需运行ruby app.rb即可部署。你想把apache或nginx放在你的Mongrel面前。 Mongrel将提供您的静态文件,但这确实只适用于开发模式。在部署中,Web服务器将为此做得更好。简而言之,您部署的环境将比独立开发环境更快。

此时,我不会担心Mongrel与Thin。如果Thin是快两倍 - 它不是 - 那么你的7秒变为3.5。那会不够好?

有些事要尝试......

我知道我刚刚告诉你要设置一个部署环境,但也许它不是服务器端。您是否尝试在网页上投放YSlowPageSpeed? I / O将占用7秒钟(免责声明:我假设您的网络设置没有任何问题),而不是服务器。 YSlow - 实际上是Firebug - 会告诉你页面的每个部分到达浏览器需要多长时间。

YSlow告诉我要做的事情之一就是在我的静态资产上放置一个远远的Expires标题,我知道但是我要离开优化直到结束。那时我意识到至少有3 different places that I could specify that header。我说服自己在nginx中这样做是正确的选择。

如果您对这些结果感到满意,那么您可以查看服务器。在我的头顶,所以不详尽

  1. 启用gzip响应。
  2. 合并样式表,以便每页请求只有一个。如果您不手动操作,可能会有一些Rack Middleware。
  3. 高速缓存。我正在尝试Rack::Cache
  4. 使用精灵减少您使用的图像下载次数。
  5. 缩小您的Javascript。再次,也许是通过Rack Middleware。
  6. 机架中间件很整洁,但它使用CPU。因此,手动缩小Javascript会为您的工作流程增加新的一步,但在服务器上,它比Middleware更快。这是一个权衡。

    很抱歉,如果这是rambly。

答案 1 :(得分:5)

我在使用霰弹枪运行Sinatra时出现此问题,但在直接运行我的应用程序时却没有(即ruby -rubygems app.rb)。这是因为猎枪会为每个请求分叉并重新加载应用程序。

我找到了一个thread in Sinatra's mailing list来讨论这个问题,那里的人建议使用rerun而不是霰弹枪。我很高兴地说它为我解决了这个问题。

答案 2 :(得分:4)

尝试使用Thin作为服务器。我注意到与WEBrick和Mongrel相比性能有所提高。

gem install thin

使用ruby TestServer.rb运行应用时,您会看到以下内容:

Sinatra / 0.10.1已经在4567上进行了开发,其中备份来自精简

答案 3 :(得分:1)

我正在使用Vagrant在VMWare Fusion中运行Sinatra。我的应用程序运行缓慢(大约十秒钟来处理请求)。然后我找到了这个宝石:

Webrick is very slow to respond. How to speed it up?

似乎WEBrick(默认情况下)配置为在每个请求上反转dns查找,这会减慢它的速度。