PHP 7.1.1 FPMとWebバックエンドサーバーとしてのNode.js 7.4.0

みなさん、こんにちは。最新バージョンのPHPとNode.jsの総合的なパフォーマンステストの結果を共有することにしました。

サーバー構成:

シンプルな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リクエスト/秒で勝ちます。 あなたを判断するのは大したことでも少ないことでもあります。

コメントで主題に関するあなたの考えを共有してください。

Source: https://habr.com/ru/post/J320670/


All Articles