サーバー構成:
シンプルなVDS-1コアプロセッサ2 GHz、1 GBのRAM、10 GB SSD。
OS:Debian 8.6。
サーバーが原則として多数の接続を処理できるように、基本的なカーネル設定も行われています。
科目:
-PHP 7.1.1 FPM
-Node.js 7.4.0
第一段階:
以下は、バックエンドが主に使用する操作です。 つまり、文字列の接着、ネットワーク入出力、算術演算、配列の操作です。
Node.jsのコード:
var fs = require('fs'); var mysql = require('mysql2'); console.time('Node.js ' + process.version + ': 1000000 '); var str = ''; for (var i = 0; i < 1000000; i++) { str += 's'; } console.timeEnd('Node.js ' + process.version + ': 1000000 '); console.time('Node.js ' + process.version + ': 1000000 '); var count = 0; for (var i = 0; i < 1000000; i++) { count++; } console.timeEnd('Node.js ' + process.version + ': 1000000 '); console.time('Node.js ' + process.version + ': 1000000 '); var array = []; for (var i = 0; i < 1000000; i++) { array.push('s'); } console.timeEnd('Node.js ' + process.version + ': 1000000 '); console.time('Node.js ' + process.version + ': 1000000 '); var array = {}; for (var i = 0; i < 1000000; i++) { array['s' + i] = 's'; } console.timeEnd('Node.js ' + process.version + ': 1000000 '); console.time('Node.js ' + process.version + ': 100 '); var content; for (var i = 0; i < 100; i++) { content = fs.readFileSync('./someFile.txt'); } console.timeEnd('Node.js ' + process.version + ': 100 '); console.time('Node.js ' + process.version + ': mysql query (SELECT NOW()) 100 '); // create the connection to database var connection = mysql.createConnection({host:'localhost', user: 'root', database: 'test', password: 'password'}); function promiseQuery(query) { return new Promise((resolve, reject) => { connection.query(query, function (err, results, fields) { resolve({err, results, fields}); }); }); } for (var i = 0; i < 100; i++) { var a = promiseQuery('SELECT NOW()'); a.then(({err, results, fields}) => { //console.log(results); }); } console.timeEnd('Node.js ' + process.version + ': mysql query (SELECT NOW()) 100 '); connection.end();
PHPのコード:
<?php $phpVersion = "v" . explode('-', PHP_VERSION)[0]; $start = microtime(1); $str = ''; for ($i = 0; $i < 1000000; $i++) { $str .= 's'; } echo "PHP $phpVersion: 1000000 : " . round((microtime(1) - $start) * 1000, 3) . "ms \n"; $start = microtime(1); $count = 0; for ($i = 0; $i < 1000000; $i++) { $count++; } echo "PHP $phpVersion: 1000000 : " . round((microtime(1) - $start) * 1000, 3) . "ms \n"; $start = microtime(1); $array = array(); for ($i = 0; $i < 1000000; $i++) { $array[] = 's'; } echo "PHP $phpVersion: 1000000 : " . round((microtime(1) - $start) * 1000, 3) . "ms \n"; $start = microtime(1); $array = array(); for ($i = 0; $i < 1000000; $i++) { $array["s" . $i] = 's'; } echo "PHP $phpVersion: 1000000 : " . round((microtime(1) - $start) * 1000, 3) . "ms \n"; $start = microtime(1); for ($i = 0; $i < 100; $i++) { $fp = fopen("./someFile.txt", "r"); $content = fread($fp, filesize("./someFile.txt")); fclose($fp); } echo "PHP $phpVersion: 100 : " . round((microtime(1) - $start) * 1000, 3) . "ms \n"; $start = microtime(1); $mysql = new mysqli('localhost', 'root', 'password', 'test'); for ($i = 0; $i < 100; $i++) { $res = $mysql->query("SELECT NOW() as `now`"); $now = $res->fetch_assoc()['now']; } echo "PHP $phpVersion: mysql query (SELECT NOW()) 100 : " . round((microtime(1) - $start) * 1000, 3) . "ms \n";
結果:

ご覧のとおり、PHPは加算操作を除くすべてのポイントで勝ちます。
第二段階:
「Hello world」の負荷テスト。 Nginx 11.7 + PHP 7.1.1 FPMとNode.js。 1000スレッドで1000リクエスト。 #ab -n 1000 -c 1000 ...
PHPコード:
<?php echo "Hello world"; ?>
コードNode.js:
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
結果
PHPとNode.jsのテストを10回実行し、両方に最適な結果を選択しました。
Node.js:

PHP:

ご覧のとおり、ここではPHPが23%または628リクエスト/秒で勝ちます。 あなたを判断するのは大したことでも少ないことでもあります。
コメントで主題に関するあなたの考えを共有してください。