对于Ruby on Rails,当使用Webrick时,它是否支持并发请求和Keep-Alive,以及为什么加载.js和.png文件这么慢?

时间:2011-03-24 16:43:32

标签: ruby-on-rails mongrel thin webrick

我正在运行Rails 3.0.5,并且在控制台上报告了一个页面需要60ms,但如果我检查Firefox Net加载时间图表,则需要2.9秒。如果我在Bash上运行ab命令,则表示需要300毫秒。

因此,如果删除了javascripts(其中6个),则需要1.9秒......但我想知道为什么这么慢?是不是值得尊重?

同样奇怪的是Firefox显示4个文件同时下载 - 我认为Webrick一次只支持1个连接?

(改为使用杂种或“瘦”会使事情变得不同或更好吗?)

如果我

,也很奇怪
ab -n 10 -c 5 http://www.somesite.com:8080

需要3秒,为了测试keep-alive的支持方式,我使用了-k选项:

ab -n 10 -c 5 -k http://www.somesite.com:8080

但现在总时间从3秒变为4.5秒。是不是keep-alive应该让它更快,Webrick支持keep-alive

另外,如果它支持并发连接,那么如果某些代码使用类变量来处理事情,那么是否会出现竞争条件? (因为类变量内容跨越请求)

2 个答案:

答案 0 :(得分:4)

这并不完全回答你的问题,但我会给你一些可能使你的问题无关紧要的建议。

Webrick不应该用于生产。它是用纯ruby编写的,一次只能处理一个请求。它不能用于开发模式之外的任何东西。

对于制作,你想在反向代理(如nginx)后面使用多个精简实例,或者你可以使用为你做这个的乘客(这是大多数人在现代使用的)。


部分回答你的问题:

ab运行速度比firefox快的原因是因为请求css和javascript文件是浏览器的功能。 ab仅对服务器的响应时间进行基准测试,不包括发送任何图像,css或js。

导轨基准测试仅为60ms的原因是因为它仅测量导轨堆栈中的时间。它不计算将请求发送回用户所需的时间。

因为webrick不是为制作而制作的,所以如果不支持keep-alive,我也不会感到惊讶。

答案 1 :(得分:0)

如果您希望在本地的两个环境中运行相同的应用程序,只需在databases.yml中创建另一个条目,如下所示:

DEV2:   适配器:mysql2   数据库:db   用户名:名称   密码:wpord!   主机:mysql.myexample.com   游泳池:5   超时:5000

然后运行rails server -e dev2 --port 3001

这对我有用。也就是说,在本地运行的同一个应用程序连接到本地AND远程数据库。