Node.js 和 io.js - 在性能上很不同
對于相同的代碼你可能會遇到的性能相差5倍以上,這取決于你使用的是node還是io.js。
首先,讓我說的更明白點。這不是也不可能是綜合測試。每一個引用都是不一樣的。我的發現可能或者不可能使用與你的案例,這取決于你的Node引用是做什么的。
我的測試
在前面的文章中,我使用C,JAVA,Javascript和FreePascal測試了一個很簡單的算法性能尋找prime-numbers和Sieve of Eratosthenes。為了測試Javascript,我基于Node選擇三種不同的實現算法,包括普通陣列,輸入陣列或緩沖。
今天我將使用相同的標準來說明node.js與io.js之間有多大的性能差距。對于你們中那些對io.js還不了解的人,io.js是node的一個分支。
我將使用在我前面文章中出現的相同的代碼。你們能夠在文章的結尾找到它。
Node和io.js有一個重要的共同點。他們都依賴于Chrome的V8 Javascript引擎。但是他們使用的是不同的V8版本。所以,當我們比較Node和IO.js的時候,其實我是比較他們使用的不同版本的Chrome V8 JavaScript引擎。
在 我的前一個測試中,我用的Node0.10.32,因為這是我使用的Linux發新版OpenSuse13.2自帶的。但是在今天的測試中,我將使用 Node 0.10.35和io.js 1.0.2,因為他們是最新的發布版。是的,我知道io.js描述該版本為“不穩定”,但它是我唯一能獲取的版本。
以運行在Intel i7-4771 3.5GHz上的64位OpenSuse 13.2系統為測試環境(作者話癆,還順帶提了一下自己之間寫的文章中也用了同樣的方法),前后測試了7次,測試結果(時間)取中位數,結果如下:
|
Node.js 0.10.35 | io.js 1.0.2 |
Buffer | 4.259 | 5.006 |
Typed-Array | 4.944 | 11.555 |
Regular Array | 40.416 | 7.359 |
|
(時間單位為秒) |
如你所見,Node和io.js對typed-array和regular array性能的變化讓人瞠目。
操作buffer,io.js比Node.js多花18%的時間。對這個結果來說不好不壞,無需操心。
對type-array的測試結果顯示Node.js、io.js兩者差距顯著:后者所費時間超過前者的兩倍!
對regular array的測試卻得出了相反的結果,而且更加明顯:Node.js所費時間超過了io.js的5倍!
它們性能差異如此之大讓我深感煩擾。作為如此成熟的產品,V8 JS引擎在不同版本上所表現的差異實在大。 我只能忍受性能伴隨版本更新一直提升的產品,但上述測試數據表明性能有可能適得其反,這實在不該發生。
結論
難決勝負!Node和io.js相互間時有趕超。但得牢記一點:這個小測試還和實際應用相差甚遠呢。
據我所悉,就連不同版本的Node都會有不同。曾記得一個開發版的Node在處理buffer的性能上卻有下降表現,參考issue on GitHub.
如果項目部署于AWS或Azure的多臺server上,CPU開銷較重,那么這個問題將十分重要。如果application在你所用的Node/io.js上的性能很差,那你得需要更多的server,這將讓你更費銀子。
本文濃縮成一句可取的話即:時刻牢記,測試你的代碼在不同版本Node/io.js上的性能。
本文地址:http://www.oschina.net/translate/node_js_and_io_js_very_different_in_performance
原文地址:http://geekregator.com/2015-01-19-node_js_and_io_js_very_different_in_performance.html