php 比nodejs 容易学,NodeJS比PHP慢得多?

我目前在Apache

PHP MySQL下运行一个小规模的Web服务器,并希望探索使用NodeJS的选项.服务器实际上有两件事情:

>提供一些静态文件(HTML / CSS /图像资源等)

>查询数据库(仅选择并插入,不更新或删除)

但是,我遇到了一些性能问题,我试图找出问题所在.为了隔离问题,我创建了一个最小的NodeJS应用程序,它运行对MySQL的查询,并以JSON的形式返回50行数据.以下是我的代码:

var express = require('express');

var compression = require('compression');

var mysql = require('mysql');

var db = mysql.createPool({

host: ,

user: ,

password: ,

database: ,

debug: false

});

var app = express();

app.use(compression());

app.get('/data', function(req, res) {

var sql = 'SELECT column_1, column_2 FROM table';

db.query(sql, function (error, rows, fields) {

if (error) throw error;

res.json(rows);

});

});

app.listen(3000, function () {

console.log("Running on port 3000.");

});

通过使用ApacheBench在并发级别为1的1000个请求(为了不影响单线程节点应用程序),结果如下:

Concurrency Level: 1

Time taken for tests: 10.377 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 3057000 bytes

HTML transferred: 2829000 bytes

Requests per second: 96.37 [#/sec] (mean)

Time per request: 10.377 [ms] (mean)

Time per request: 10.377 [ms] (mean, across all concurrent requests)

Transfer rate: 287.69 [Kbytes/sec] received

作为比较,下面是我的PHP代码:

$hostname = ;

$username = ;

$password = ;

$database = ;

try {

$db_handler = new PDO('mysql:host=' . $hostname . ';dbname=' . $database, $username, $password);

} catch (PDOException $e) {

throw new Exception('[ERROR] Unable to connect to the database.');

}

$sql = 'SELECT column_1, column_2 FROM table';

$statement = $db_handler->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$statement->execute();

$rows = array();

while ($row = $statement->fetch(PDO::FETCH_ASSOC)){

$rows[] = $row;

}

print json_encode($rows);

$db_handler = null;

?>

而ApacheBench的结果:

Concurrency Level: 1

Time taken for tests: 6.726 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 3023000 bytes

HTML transferred: 2829000 bytes

Requests per second: 148.68 [#/sec] (mean)

Time per request: 6.726 [ms] (mean)

Time per request: 6.726 [ms] (mean, across all concurrent requests)

Transfer rate: 438.92 [Kbytes/sec] received

从上述结果可以看出,PHP比NodeJS快得多.如果触发更复杂的查询(差异可能是20次,如20ms对400ms),或者并发级别增加,则差异更大.

我已经尝试添加最多4名工作人员(我正在运行Raspberry Pi 2的服务器,它有4个核心)到Node应用程序,看看它是否有帮助,不幸的是它仍然不接近PHP的结果.你能告诉我可能做错了什么吗?或者NodeJS只是不是我想要实现的好选择?

[EDITED]

非常感谢您的意见.似乎大多数人怀疑这个问题是由NodeJS MySQL驱动造成的.我也做了一些更多的测试,以确定是否如此,我不小心发现一些非常有趣的东西.

通过在另一台PC(Core 2 Duo E7200)上运行相同的Node应用程序,但是在Raspberry Pi上连接到同一个MySQL,结果其实是相当不错的:

Concurrency Level: 1

Time taken for tests: 2.705 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 3057000 bytes

HTML transferred: 2829000 bytes

Requests per second: 369.71 [#/sec] (mean)

Time per request: 2.705 [ms] (mean)

Time per request: 2.705 [ms] (mean, across all concurrent requests)

Transfer rate: 1103.72 [Kbytes/sec] received

作为比较,我还在该PC上运行Apache服务器,连接到Raspberry Pi上的同一个MySQL,结果如下:

Concurrency Level: 1

Time taken for tests: 6.297 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 3034000 bytes

HTML transferred: 2829000 bytes

Requests per second: 158.80 [#/sec] (mean)

Time per request: 6.297 [ms] (mean)

Time per request: 6.297 [ms] (mean, across all concurrent requests)

Transfer rate: 470.50 [Kbytes/sec] received

作为总结,下面是我到目前为止的结果.只有Web服务器部分是不同的,而数据库总是MySQL在Raspberry Pi上:

Server Time Taken

Node (Pi) 10.337s

PHP (Pi) 6.726s

Node (PC) 2.705s

PHP (PC) 6.297s

PHP的结果似乎在两个服务器上或多或少相同,而NodeJS的结果变化很大.基于上面的结果,在我看来,NodeJS对CPU性能更敏感,或者说另一个字是CPU密集型? (我正在使用的NodeJS版本是v6.9.4,只是FYI)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值