在询问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之类的?)
答案 0 :(得分:9)
我会就何时优化您的网络应用程序留下任何意见。
在Sinatra应用程序中设置不同的配置以进行开发和生产,因为其中一些建议,您并不总是想要使用。实际上,您应该继续进行设置和环境,类似于在生产中部署的方式。只需运行ruby app.rb
即可部署。你想把apache或nginx放在你的Mongrel面前。 Mongrel将提供您的静态文件,但这确实只适用于开发模式。在部署中,Web服务器将为此做得更好。简而言之,您部署的环境将比独立开发环境更快。
此时,我不会担心Mongrel与Thin。如果Thin是快两倍 - 它不是 - 那么你的7秒变为3.5。那会不够好?
有些事要尝试......
我知道我刚刚告诉你要设置一个部署环境,但也许它不是服务器端。您是否尝试在网页上投放YSlow或PageSpeed? I / O将占用7秒钟(免责声明:我假设您的网络设置没有任何问题),而不是服务器。 YSlow - 实际上是Firebug - 会告诉你页面的每个部分到达浏览器需要多长时间。
YSlow告诉我要做的事情之一就是在我的静态资产上放置一个远远的Expires标题,我知道但是我要离开优化直到结束。那时我意识到至少有3 different places that I could specify that header。我说服自己在nginx中这样做是正确的选择。
如果您对这些结果感到满意,那么您可以查看服务器。在我的头顶,所以不详尽
机架中间件很整洁,但它使用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查找,这会减慢它的速度。