nginx 的 performance compare with PHP

常言道 V8 超快 XD

所以心中一直有疑惑,到底是快到哪裡去 = =

node.js 真的有比其他的快嘛?

所以做了一點小實驗

比較 node.js 跟 php 的 performance
採用的軟體如下

  • Linux Kernel : 2.6.38-gentoo-r3 compiled with non-preemptive
  • web server : nginx 0.8.53
  • php version : PHP 5.3.6-pl1-gentoo running on php-fpm with port 8000
  • node.js : v0.4.7

php 的程式碼如下


我們利用 ab (apache benchmark program)

Concurrency Level 是 200
Total 打 10000 次

得到的資訊如下


這裡可能會有人有疑惑說為什麼 php 不要用 unix socket 要用 tpc/ip socket 跑

因為我發現 php-fpm 綁在 unix socket 結果當 concurrency 是 200 時有一半以上不是回傳 200 ok

但是 concurrency 降到 100 時候又全部 ok

反正怪怪的 後來綁 tcp/ip 的就都 ok 了! (當然效能會折損)

所以 php-fpm 綁 port 8000 然後下面介紹的 node.js 是綁在 port 3000

nginx 都用 proxy_pass mode

而 node.js 的程式如下


結果如下


我大概前後都各跑了 5 次 結果數值都差不多

我們可以發現 node.js on V8 比 php 快一點點 不管在 RPS (Requests per second) 或者是 Processing 上都快一點點

不過比較奇怪的是最長的時間都是三秒多 XD 是 nginx 的問題嘛 - - 承受不了這麼多 request

至於在 CPU 跟記憶體的比較上 我覺得好像差不多耶 沒有很明顯的差距拉出來

然後我又做了一點點小延伸 這次我裝了 node.js 的 framework Express

然後一樣的 output , app.js 的部份程式碼如下


得到的結果是這樣


效能大概降了 30% 有吧 蠻慘的 XD

遠輸於 php 不過我沒有跑 Zend 試看看 我想一但有 framework 上去 不管什麼都會變慢吧

尤其是 routing 最麻煩 所以應該都會慢很多

所以結論是原生的 node.js 是比 php 快一點點的 (約 5%)

後記:
這裡有一篇類似的 不過他打的數量好高
Benchmarking Node.js – basic performance tests against Apache + PHP

分享到