Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 为什么我的sinatra网站这么慢?_Performance_Sinatra - Fatal编程技术网

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

Performance 为什么我的sinatra网站这么慢?,performance,sinatra,Performance,Sinatra,经过询问,我开始使用Sinatra作为一种服务网页的方式 今天晚上,我和一个朋友开始测试服务器的速度 要登录的文件如下所示: require 'rubygems' require 'sinatra' require 'haml' enable :sessions #for cookies! get '/' do haml :index end %title First Page %header %h2 First Page index.haml看起来像: requir

经过询问,我开始使用Sinatra作为一种服务网页的方式

今天晚上,我和一个朋友开始测试服务器的速度

要登录的文件如下所示:

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

enable :sessions #for cookies!

get '/' do 
  haml :index 
end
%title
  First Page

%header 
  %h2 First Page
index.haml看起来像:

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

enable :sessions #for cookies!

get '/' do 
  haml :index 
end
%title
  First Page

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


无论服务器操作系统、Windows还是Linux,Sinatra都需要7秒钟来完成一个页面请求。我看到作者每秒处理了400多个请求。有什么好处?(或者应该是在超级用户或类似设备上?

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

gem install thin
当您使用ruby TestServer.rb运行应用程序时,您将看到以下内容:


Sinatra/0.10.1已经在4567上登上了开发的舞台,它的备份来自Thin

关于何时应该优化web应用程序,我将不发表任何意见

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

在这一点上,我不会担心混血儿对瘦。如果Thin的速度是Thin的两倍——事实并非如此——那么你的7秒就变成了3.5秒。那够好吗

有些事情要尝试

我知道我刚刚告诉过你设置一个部署环境,但可能不是服务器端。你试过跑步或上网吗?I/O将比服务器占用更多的7秒钟(免责声明:我假设您的网络设置没有问题)。YSlow—实际上是Firebug—将告诉您页面的每个部分进入浏览器所需的时间

YSlow告诉我要做的一件事是在我的静态资产上设置一个远向过期标题,我知道这一点,但我将把优化工作留到最后。那时我才意识到至少有。我正在说服自己,在nginx中使用它是正确的

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

  • 打开gzip响应
  • 合并样式表,这样每页请求只有一个样式表。如果您不手动执行此操作,可能会有一些机架中间件
  • 缓存。我正在努力
  • 使用精灵可减少使用的图像下载次数
  • 缩小你的Javascript。同样,可能通过机架中间件
  • 机架中间件很整洁,但它使用CPU。因此,手动缩小Javascript为工作流添加了一个新步骤,但在服务器上,它比中间件更快。这是一种权衡


    很抱歉,这太过冗长。

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


    我找到了一个讨论这个问题的网站,那里的人建议用枪代替猎枪。我很高兴地说,它为我解决了这个问题。

    我正在VMWare Fusion内与Vagrant一起运行Sinatra。我的应用程序运行缓慢(大约需要10秒来处理请求)。然后我发现了这个宝石:


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

    可能是您的配置正在使用的服务器。例如,WEBrick、Thin和Mongrel之间有很大的区别。如何从命令行启动sinatra应用程序;基本上,我们运行“ruby TestServer.rb”,然后连接到端口4567。我对此完全不了解,所以如果有这方面的指南,让我知道。我从gem得到的sinatra版本是0.9.4;我是否也应该获得其他更新的版本?我从github获得了0.10.1版。gem install sinatra sinatra--source=作为旁注,thin在没有nmake的windows上无法工作(也就是说,显然没有windows 64位版本)。Mongrel应该可以很好地工作。此外,Windows上的Thin在提供缓存的静态资源方面非常慢,至少在开发模式下是如此。在空闲的2.8GHz 8核8GB机箱上从localhost提供服务需要6.2秒才能满足36个请求(其中35个为状态:304),总容量为13.25kB。清除缓存并重新发出该请求仅在2.2秒内传输总计454kB的36个(状态:200)请求。使用两台机器在另一个盒子上反向代理Nginx背后的所有这些内容,缓存的盒子需要99ms,未缓存的盒子需要156ms。当您必须使用Windows作为服务器时,我仍然建议使用精简版,但不要单独使用精简版。感谢您的全面回复!你在“远进头球”中失去了我,从那以后,我了解到我的无知之深。我想我还有很多事情要做。这是我从雅虎网站上学到的一个术语!YSlow站点。它只是意味着将Expires头设置为将来的某个点。比如说20年。我选择这个作为答案纯粹是因为一旦我通过Hello World,它会让我学到很多关于优化的知识。在本例中,修复方法是在webrick中进行调试。“我将搁置任何关于何时优化web应用程序的意见。”-pffft,他收到了0.14次请求/秒的简单实现,当然他现在应该进行调查。谢谢!绝对法