node.jsを試してみた その1: インストール

node.jsという存在を知ったので、調査+インストールしてみた。

名前だけは聞いたことがあったけど、
勝手にjQueryのようなクライアントサイドJavascriptを想像してました。
完全に間違い。

Evented I/O for V8 JavaScript.
An example of a web server written in Node which responds with "Hello World" for every request.
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
To run the server, put the code into a file example.js and execute it with the node program:
% node example.js
Server running at http://127.0.0.1:8124/
なんと、たった6行のJavascriptでHTTPサーバを作れるっつー話だからビックリ。

早速公式サイトからダウンロード。
今回試したバージョンは、
http://nodejs.org/dist/node-v0.2.3.tar.gz

$ http://nodejs.org/dist/node-v0.2.3.tar.gz
$ tar xvzf node*tar.gz
$ cd node-v0.2.3
$ configure
$ make
'build' finished successfully (5m41.814s)

コードが多いからか、コンパイルに時間がかかる。
コンパイルに使ったのは、Thinpad x100e memory 2G。
ちなみに、HP 2133だと14分、Mac miniだと3分25秒かかった。

あとは、公式サイトにあるhttpdコードを起動して動作確認。

/Users/satoshi% cat httpd.js 
var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
/Users/satoshi% node httpd.js 
Server running at http://127.0.0.1:8124/

これで起動OK。あとはブラウザからhttp://localhost:8124/にアクセスすれば
ちゃんと動作していることがわかる。

で、性能測定してみると、こんな感じ。
 This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)


Server Software:      
Server Hostname:        localhost
Server Port:            8124

Document Path:          /
Document Length:        12 bytes

Concurrency Level:      20
Time taken for tests:   0.886 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      76000 bytes
HTML transferred:       12000 bytes
Requests per second:    1128.29 [#/sec] (mean)
Time per request:       17.726 [ms] (mean)
Time per request:       0.886 [ms] (mean, across all concurrent requests)
Transfer rate:          83.74 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.4      0       9
Processing:     3   17   9.6     16      59
Waiting:        3   17   9.6     16      57
Total:          3   17   9.7     16      59

Percentage of the requests served within a certain time (ms)
  50%     16
  66%     20
  75%     22
  80%     24
  90%     28
  95%     36
  98%     48
  99%     51
 100%     59 (longest request)
比較のために、同様の出力をするapache2+php5.3.2 on Ubuntuだと
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)


Server Software:        Apache/2.2.14
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        177 bytes

Concurrency Level:      20
Time taken for tests:   1.104 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      389000 bytes
HTML transferred:       177000 bytes
Requests per second:    906.07 [#/sec] (mean)
Time per request:       22.073 [ms] (mean)
Time per request:       1.104 [ms] (mean, across all concurrent requests)
Transfer rate:          344.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3   2.5      2      18
Processing:    11   18   9.7     17      96
Waiting:        9   16   9.3     14      89
Total:         14   21  11.5     18     113

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     20
  75%     20
  80%     20
  90%     21
  95%     35
  98%     81
  99%     98
 100%    113 (longest request)
となる。

比較としては公平とはいえないかもしれないけど、PHPよりも早いことがわかる。
これからもう少し詳しく調べてみる。

PHPいらない疑惑?