【发布时间】:2016-11-17 02:27:43
【问题描述】:
我正在使用 apache 基准测试工具在 PHP 和 Node.js、端口 80 和端口 8000 上分别运行基准测试。下面的节点基准测试命令,在 PHP 上运行测试时交换端口:
ab -n 100 -c 100 http://localhost:8000/
我在程序中所做的只是读取一个 10MB 的文本文件,然后将其发送回客户端。令我惊讶的是,PHP 基准测试需要大约 6 秒,而 Node.js 则需要 13 秒。
这是文本文件:
https://github.com/jamesward/play-load-tests/blob/master/public/10mb.txt
这是每个的代码:
Node.js
var http = require("http");
var fs = require("fs");
var s = http.createServer(function(req, res) {
res.writeHead(200, {"content-type": "text/plain"});
fs.readFile("./10mb.txt", "utf8", function(err, data) {
res.end(data);
});
});
s.listen(8000);
PHP
<?php
echo file_get_contents("./10mb.txt");
我在 Node 代码中做错了吗?否则我很困惑,Node 的主要卖点之一是它在 OI 操作中的速度很快。我错过了什么?
【问题讨论】:
-
这里的版本号将是关键。我假设 PHP 和 Node.js 都是最新版本?
-
我不认为这个问题会吸引有用的答案,而是会以“好吧,因为 [x] 简直太臭了”的形式吸引了大量的猜测和一些高度自以为是的答案。您可以尝试通过阅读脚本in 来获取有关节点脚本的更多详细信息,看看哪些部分会减慢您的速度。可能是将其加载到变量中并然后将其发送到客户端需要更多时间,而 PHP 会自动优化 no-variable-one-liner?
-
是 PHP 7 和 Node LTS,6.9.1
-
先将 php file_get_contents 返回值放入变量中,然后在第二行回显该变量并没有使其变慢。