代码之家  ›  专栏  ›  技术社区  ›  mmr

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

  •  11
  • mmr  · 技术社区  · 15 年前

    询问之后 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
    

    他和我一样坐在最近的一台笔记本电脑上,我们两人之间有一台苹果802.11n路由器。我们都在运行Windows7。我也在运行带有Sinatra的Ubuntu9.10x64的笔记本电脑上尝试过这些相同的文件,以及从apt-get安装的所有相关文件。

    不管是服务器操作系统、Windows还是Linux,Sinatra都需要7秒钟来完成单页请求。我明白了 here 作者设法每秒处理400多个请求。给出了什么?(或者这应该是超级用户还是类似的?)

    4 回复  |  直到 10 年前
        1
  •  9
  •   Community kfsone    7 年前

    对于什么时候优化Web应用程序,我将置之不理。

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

    在这一点上,我不会担心混血儿和瘦的。如果瘦的速度是它的两倍,那么你的7秒就变成了3.5秒。那足够好吗?

    有些事情要尝试…

    我知道我刚刚告诉过你要建立一个部署环境,但可能不是服务器端。你试过跑步吗 YSlow PageSpeed 在你的页面上?I/O将花费比服务器更长的时间(免责声明:我假设您的网络设置没有任何问题)。YSlow——实际上是Firebug——会告诉你页面的每个部分需要多长时间才能进入浏览器。

    yslow告诉我要做的一件事是在静态资产上设置一个远提前的expires头段,我知道这一点,但我将优化一直保留到最后。当我意识到 3 different places that I could specify that header . 我要说服自己,在nginx做这件事是正确的。

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

    1. 打开gzip响应。
    2. 合并样式表,这样每页请求只有一个。如果不手动操作,可能会有一些机架中间件。
    3. 隐藏物。我正在努力 Rack::Cache .
    4. 使用sprites减少您使用的图像下载次数。
    5. 缩小你的javascript。同样,也可以通过机架中间件。

    机架中间件很整洁,但它使用CPU。因此,手动缩小您的javascript为您的工作流添加了一个新的步骤,但是在服务器上,它比中间件更快。这是一种权衡。

    如果这是胡言乱语的话,我很抱歉。

        2
  •  5
  •   meqif    13 年前

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

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

        3
  •  4
  •   Trevor    15 年前

    尝试使用瘦服务器。我注意到,与Webrick和Mongrel相比,性能有所提高。

    gem install thin
    

    当你使用 ruby TestServer.rb 您将看到以下内容:

    Sinatra/0.10.1已经在4567上进行了开发,并从 薄的

        4
  •  1
  •   Community kfsone    7 年前

    我正在用Vagrant在VMware Fusion中运行Sinatra。我的应用程序运行缓慢(大约10秒以服务请求)。然后我发现了这个宝石:

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

    似乎Webrick(默认情况下)被配置为对每个请求进行反向DNS查找,这减慢了它的速度。