gpt4 book ai didi

ruby-on-rails - 这是展示 Nodejs (expressjs) 优于 Rails/Django/etc 的好方法吗?

转载 作者:搜寻专家 更新时间:2023-10-31 23:36:11 25 4
gpt4 key购买 nike

更新

这不应该是基准测试,也不是 Node 与 ruby​​ 的对比(我应该在问题中更清楚地说明这一点,抱歉)。重点是比较和演示阻塞和非阻塞之间的区别以及编写非阻塞是多么容易。例如,我可以比较使用 EventMachine,但 Node 有这个内置的,所以这是显而易见的选择。


我正在尝试向一些 friend 展示 nodejs(及其框架)相对于其他技术的优势,一些非常容易理解的方式,主要是非阻塞 IO。

所以我尝试创建一个(非常小的)Expressjs 应用程序和一个 Rails 应用程序,它们会在谷歌上执行 HTTP 请求并计算生成的 html 长度。

正如预期的那样(在我的电脑上)Expressjs 通过 ab 比 Rails 快 10 倍(见下文)。我的问题是,这是否是展示 nodejs 相对于其他技术的主要优势的“有效”方式。 (或者 Expressjs/Connect 中正在进行某种缓存?)

这是我使用的代码。

Expressjs

exports.index = function(req, res) {
var http = require('http')
var options = { host: 'www.google.com', port: 80, method: 'GET' }
var html = ''
var googleReq = http.request(options, function(googleRes) {
googleRes.on('data', function(chunk) {
html += chunk
})
googleRes.on('end', function() {
res.render('index', { title: 'Express', html: html })
})
});
googleReq.end();
};

rails

require 'net/http'

class WelcomeController < ApplicationController
def index
@html = Net::HTTP.get(URI("http://www.google.com"))
render layout: false
end
end

这是AB基准测试结果

Expressjs

Server Software:        
Server Hostname: localhost
Server Port: 3000

Document Path: /
Document Length: 244 bytes

Concurrency Level: 20
Time taken for tests: 1.718 seconds
Complete requests: 50
Failed requests: 0
Write errors: 0
Total transferred: 25992 bytes
HTML transferred: 12200 bytes
Requests per second: 29.10 [#/sec] (mean)
Time per request: 687.315 [ms] (mean)
Time per request: 34.366 [ms] (mean, across all concurrent requests)
Transfer rate: 14.77 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 0
Processing: 319 581 110.6 598 799
Waiting: 319 581 110.6 598 799
Total: 319 581 110.6 598 799

Percentage of the requests served within a certain time (ms)
50% 598
66% 608
75% 622
80% 625
90% 762
95% 778
98% 799
99% 799
100% 799 (longest request)

rails

Server Software:        WEBrick/1.3.1
Server Hostname: localhost
Server Port: 3001

Document Path: /
Document Length: 65 bytes

Concurrency Level: 20
Time taken for tests: 17.615 seconds
Complete requests: 50
Failed requests: 0
Write errors: 0
Total transferred: 21850 bytes
HTML transferred: 3250 bytes
Requests per second: 2.84 [#/sec] (mean)
Time per request: 7046.166 [ms] (mean)
Time per request: 352.308 [ms] (mean, across all concurrent requests)
Transfer rate: 1.21 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 180 387.8 0 999
Processing: 344 5161 2055.9 6380 7983
Waiting: 344 5160 2056.0 6380 7982
Total: 345 5341 2069.2 6386 7983

Percentage of the requests served within a certain time (ms)
50% 6386
66% 6399
75% 6402
80% 6408
90% 7710
95% 7766
98% 7983
99% 7983
100% 7983 (longest request)

最佳答案

补充肖恩的回答:

基准是没有用的。他们展示了你想看到的。他们没有展示真实的画面。如果您的应用程序所做的只是代理对 google 的请求,那么事件服务器确实是一个不错的选择(node.js 或基于 EventMachine 的服务器)。但通常你想做的不止于此。而这正是 Rails 更好的地方。满足各种可能需求的 Gem、熟悉的顺序代码(与回调意大利面条相反)、丰富的工具,我可以继续。

在选择一种技术而不是另一种技术时,评估所有方面,而不仅仅是它代理请求的速度有多快(除非再次构建代理服务器)。

关于ruby-on-rails - 这是展示 Nodejs (expressjs) 优于 Rails/Django/etc 的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com