Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

とりあえず簡単なベンチマークNode.js,PHP,Perl

追記:2013/03/12 v0.4.12, v0.7.12, v0.9.0, v0.9.10, v0.10.0 のテストを追加

とりあえず、というのは「とりあえずビールね!」という軽い感じのという意味で、今日は、Node.jsではありがちなベンチマークです。

まぁ、自分で試さないと気が済まないので、軽い感じの演算ベンチマークテストをやってみました。

PerlとPHPは結構しばらく使ってなかったので、あれ?あれ?などと言いながら書きました^^;。ミスがあったら突っ込んでください。少しでも正しい値が知りたいので。

まぁ、言うまでもありませんが、ベンチはあくまでベンチなので、ひとつの目安にしか過ぎませんので、そこのところはあしからず。。。

テストマシン

テストに使ったのはこないだ作ったリーズナブルマシンです。

OS Ubuntu 12.04 LTS (GNU/Linux 3.2.0-29-generic-pae i686)

ベアボーンキット    Shuttle XH61V ¥16,800
メモリ   TRJ JM1333KSN-8GK(SODIMM DDR3 PC3-10600 4GBx2) ¥3,170
CPU Intel Core i3-2120 BOX (1155/3.30/3M/C2/T4) ¥9,760
SSD OCZSSD2-1VTXPL60G ¥5,980
----------------------------------------------
合計 35,710円

テストコード

ベンチ用のコードは下記の通り。演算自体に意味はありません。これを1千万回繰り返した場合は何msかかるか?という計測です。*console.time、console.timeEndは、他となるべく揃えるためにあえて使ってません。

Node.js

v0.8.8

Node.js
var i,a = 0, max = 10000000;

var start = Date.now();

for (i = 0; i < max; i++) {
    a += (i + 1 * 10 / 5) ;
}

var end = Date.now();
console.log(end - start);
console.log('end: ' + end);
console.log('start: ' + start);

PHP

PHP 5.3.10-1ubuntu3.2 with Suhosin-Patch (cli)

<?php
$i = null;
$a = 0;
$max = 10000000;

$start = microtime(true)*1000;

for ($i = 0; $i < $max; $i++) {
    $a += ($i + 1 * 10 / 5) ;
}
$end = microtime(true)*1000;
var_dump($end - $start);
var_dump('end: '.$end);
var_dump('start: '.$start);
var_dump('a: '.$a);
?>

Perl

perl 5, version 14, subversion 2 (v5.14.2) built for i686-linux-gnu-thread-multi-64int

use Time::HiRes;

$i = null;
$a = 0;
$max = 10000000;

$start = Time::HiRes::time * 1000;

for ($i = 0; $i < $max; $i++) {
    $a += ($i + 1 * 10 / 5) ;
}
$end = Time::HiRes::time *1000;
print($end - $start);
print("\n"."end: ".$end);
print("\n"."start: ".$start);
print("\n"."a: ".$a);

結果

単位 ミリ秒(1/1000秒)

結果はこうでした。Perlが意外でしたが、まぁ1千万回繰り返してのミリ秒単位ですから決して遅くはないです。

項目   一回目, 二回目, 三回目, 四回目, 五回目

Node    17,    16,    17,    17,    17

PHP    909,   901,   902,   900,   904

Perl  1792,  1795,  1804,  1808,  1783

出力サンプル

Node

17
end: 1346492667034
start: 1346492667017
a: 50000015000000

PHP

float(909.15283203125)
string(20) "end: 1346493654404.8"
string(22) "start: 1346493653495.6"
string(17) "a: 50000015000000"

Perl

1795.85009765625
end: 1346493732819.79
start: 1346493731023.94
a: 50000015000000

Node.jsのバージョン毎にはどうなの?

こうなりました。バージョンアップ毎に確実に速くなっているようですが、このベンチでは、v0.7.12以降はほぼ止まってます。まぁ、こういう基本的な演算性能はもうあまり変わらないのかな?

ちなみに、v0.10.0 ではHTTP, FS, TLSで早くなったとアナウンスされています。http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/

項目    一回目, 二回目, 三回目, 四回目, 五回目

v0.10.0   17,    17,    17,    17,    17

v0.9.10   16,    16,    17,    17,    16

v0.9.0   17,    17,    17,    17,    17

v0.8.8    17,    16,    17,    17,    17 <-上記テストバージョン

v0.7.12   16,    17,    17,    17,    16

v0.6.18   19,    19,    19,    19,    19

v0.5.0    36,    29,    33,    33,    33

v0.4.12    30,    32,    31,    33,    34

Node関連ベンチマークリンク

Node.js vs PHP Performance – Maths

http://www.matt-knight.co.uk/2011/node-js-vs-php-performance-maths/
>PHPより50倍速かった

文字列結合のベンチマークをいろんな処理系でやってみた

http://www.slideshare.net/kwatch/ss-8933694/7
>V8(+crankshaft)の速度は他の処理系が泣いて土下座するレベル

node-js-vs-apache-php-benchmark

http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests
>並行性bencmark

 |  同時並行性 | 100 | 200 | 400 | 800 | 
 |:-------|--------:|:--------:|
 |  ApacheのPHP | 6.337 | 6.955 | 6.723 | 19.232 | 
 |  nodeJS  | 3.461 | 3.284 | 3.721 | 3.689 | 

>100リクエスト、100の同時

 |  X  |  1 | 2 | 3 | 4 | 5 | 
 |:-------|--------:|:--------:|
 |  ApacheのPHP |  38.359 |  37.930 |  37.058 |  37.441 |  36.704 | 
 |  nodeJS |  3.798 |  3.740 |  3.856 |  3.755 |  3.878 | 

デブサミ2012 16-A-5 レポート

http://codezine.jp/article/detail/6461
>Perl、Python、PHP、Rubyよりも約10倍速い。

Node.js の Cluster のベンチマークをとってみた(Nodeのみのベンチ)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
18
Help us understand the problem. What are the problem?