node.js速度大評測

6 / 20, 2013 node.js , 伺服器

可能你會覺得本站的文章自從上個月起多了一些文章關於node.js。你可能覺得我好像把它說得非常神奇,做什麼都可以。可是,你有沒有對node.js的速度感到興趣呢?這篇文章就是對node.js的速度進行大測試啊!快開始啦!

(如果你想在自己的電腦上進行測試,請先安裝node.js。)

這次我們的測試會用node.js的負載器來進行負載測試。首先,我們要預備一個node.js的伺服器來進行測試。這裡是node.js伺服器的代碼:

server.js
var http = require('http');
var fs = require('fs');

var server = http.createServer(function(req,res){
	fs.readFile(__dirname+'/index.html',function(e,data){
		if(!e){
			res.end(data);
		}
		else {
			res.end();
		}
	});
});
server.listen(8000);

我們也要弄一個主頁來給伺服器。

index.html
 <h1>This is a test</h1>

現在,我們就要一個node.js的負載器。我們會用ApacheBench來測試負載。這是測試結果:

ab -c 1000 -n 10000 http://127.0.0.1:8000/
Concurrency Level: 1000
Time taken for tests: 7.018 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 980000 bytes
HTML transferred: 230000 bytes
Requests per second: 1424.83 [#/sec] (mean)
Time per request: 701.840 [ms] (mean)
Time per request: 0.702 [ms] (mean, across all concurrent requests)
Transfer rate: 136.36 [Kbytes/sec] received

接著我們就會進行一個更為艱辛的測試:把http要求和同步連線數目增加。(這次我的電腦糟糕了……)

ab -c 1000 -n 1000000 http://127.0.0.1:8000/
Concurrency Level:      1000
Time taken for tests:   1031.621 seconds
Complete requests:      1000000
Failed requests:        0
Write errors:           0
Total transferred:      98000000 bytes
HTML transferred:       23000000 bytes
Requests per second:    969.35 [#/sec] (mean)
Time per request:       1031.621 [ms] (mean)
Time per request:       1.032 [ms] (mean, across all concurrent requests)
Transfer rate:          92.77 [Kbytes/sec] received

從這些結果中,我們可以看見node.js的效能很好。一個node.js程序可以在一秒內輕鬆應付一千多個HTTP請求,還要沒有錯誤。對於大型網絡應用程式,node.js是一個非常合適的平台。來一起看看我們平時用的Apache伺服器的效能是怎樣的:

ab -c 100 -n 10000 http://127.0.0.1:8080/
Concurrency Level:      100
Time taken for tests:   38.898 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      19150000 bytes
HTML transferred:       15530000 bytes
Requests per second:    257.08 [#/sec] (mean)
Time per request:       388.982 [ms] (mean)
Time per request:       3.890 [ms] (mean, across all concurrent requests)
Transfer rate:          480.77 [Kbytes/sec] received

不知發生了什麼事,我怎樣測試都不能連線到在我電腦的Apache伺服器,所以不能給你效能資訊。我不能使用和node.js相同的設定來做負載測試,否則就會失敗,況且效能實在差太遠了。(我是一個對Apache伺服器非常過敏的程式員來的。)總括而言,node.js是一個非常快的東西,非常適合拿來當HTTP伺服器啊!如果你還沒學node.js,那就趕快去學吧!它的速度真的是非常的吸引啊!

  • AAA

    Node.js 有他強而適用的地方,但是「大型網絡應用程式,node.js是一個非常合適的平台」這句話有待商確。規模大但服務流程單純=大型 or 規模大且服務流程複雜=大型?

    嘴大吃的快,不代表就消化的了。希望你能夠瞭解我的比喻。「index.html」測試出來的數據很漂亮,但是他並不存在於真正的商務應用之中。

    這也就是業界主力還是把Node.js用於提供RESTful回傳的JSON資訊上。

  • AAA

    路過,給點意見供各位參考。
    為了一個新專案建立的 IIS Server Farm
    Apache AB Data:
    Requests per second: 741.77 [#/sec] (mean)

    建議:不要小看任何你未曾深入研究/調校過的技術。

  • secret

    我還滿喜歡Apache說…
    至少比IIS好很多

    • s3131212

      微軟的IIS本來就不是人用的,速度怎麼會快呢?

      • Licson Lee

        你又不可以這樣說,所有Microsoft的網站都是用IIS的。(我忘了說,Microsoft是非常支持node.js的發展的 。)

        • TingYuYan

          是喔,原來微軟也有在注意Node.js…..

          老實說我覺得M$就是什麼都要用自己的…..

          • Licson Lee

            (我也是什麼都是用自己的…)

            • TingYuYan

              老實說我也是這種個性….XD

    • Licson Lee

      node.js可是神速的,相比Apache是一隻老蝸牛,慢死了。