在提出这个问题后,我开始使用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秒钟来提供单页请求.我看到作者设法在这里处理了400多个请求/秒.是什么赋予了?(或者应该在SuperUser等上?)
我会就何时优化您的Web应用程序留下任何意见.
在您的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个不同的地方我可以指定那个标题.我说服自己在nginx中这样做是正确的选择.
如果您对这些结果感到满意,那么您可以查看服务器.脱离我的头顶,所以并非详尽无遗
打开gzip响应.
结合您的样式表,每页只有一个请求.如果您不手动执行此操作,可能会有一些机架中间件.
缓存.我正在尝试Rack :: Cache.
使用精灵来减少您使用的图像下载次数.
缩小您的Javascript.也许,通过Rack Middleware.
机架中间件很整洁,但它使用CPU.因此,手动缩小Javascript会为您的工作流程增加新的一步,但在服务器上,它比Middleware更快.这是一个权衡.
对不起,如果这是rambly.
我在使用霰弹枪运行Sinatra时出现此问题,但在直接运行我的应用程序时却没有(即ruby -rubygems app.rb
).这是因为猎枪会为每个请求分叉并重新加载应用程序.
我在Sinatra的邮件列表中找到了一个讨论这个问题的帖子,那里的人建议使用重新运行而不是霰弹枪.我很高兴地说它为我解决了这个问题.