node.js的一點小花邊

每次羣上有人討論node.js,都會顯得特別熱鬧,針對大家討論的熱點問題,百度谷歌了一些資料作爲參考。

一、爲什麼叫Node.js,跟javascripts有什麼關係?
http://developer.51cto.com/art/201109/288849_1.htm

事實上,Node.js採用C++語言編寫而成,是一個Javascript的運行環境。爲什麼採用C++語言呢?據Node.js創始人Ryan Dahl回憶,他最初希望採用Ruby來寫Node.js,但是後來發現Ruby虛擬機的性能不能滿足他的要求,後來他嘗試採用V8引擎,所以選擇了C++語言。

結論:Node不是JavaScript,Node可以運行JavaScript

Node不是JavaScript,Node是一個可以運行JavaScript的程序,但Node絕對不是JavaScript。
在我眼裏看來,有一個比較激進的看法,javascripts相當於一個C/C++語言的語法糖,爲編程帶來便利,當然執行具體操作的時候,我們沒必要過多究竟調用誰,因爲最後執行的還是機械語言,只是想說,node.js的強大並不只是因爲支持javascript,讓前端工程師也能參與到後端開發當中,只要效率有足夠好和有足夠的描述能力,甚至會出現node-lua Node-ruby。

二、Node.js的性能到底如何?
每次提到性能如何,總會有人出來說,V8牛逼,所以node.js厲害,但到底V8跟node.js,是什麼關係呢?V8的優勢又是啥呢?
V8引擎,是由幾個核心的部分組成的。

● 一個基本的編譯器(basecompiler),在你的代碼運行之前,它會分析你的JavaScript代碼並且生成本地的機器碼,而不是通過字節碼的方式來運行,也不是簡單地解釋它。這種機器碼起初是沒有被高度優化的。

● V8通過對象模型(objectmodel)來表達你的對象。對象是在JavaScript中是以關聯數組的方式呈現的,但是在V8引擎中,它們是通過隱藏類(hiddenclasses)的方式來表示的。這是一種可以優化查找的內部類型機制(internaltypesystem)。

● 一個運行期剖析器(runtimeprofiler),它會監視正在運行的系統,並且標識出“熱點”函數(“hot”function),也就是那些最後會花費大量運行時間的代碼。

● 一個優化編譯器(optimizingcompiler),重新編譯並優化運行期剖析器所標識“熱點”代碼,然後執行優化,例如,把代碼進行內聯化(inlining)(也就是在函數被調用的地方用函數主體去取代)。

● V8引擎支持逆優化(deoptimization),意味着如果優化編譯器發現在某些假定的情況下,把一些已經優化的代碼進行了過度的優化,它就會把它門從生成的代碼中抽離出來。

● V8擁有垃圾回收器。理解它是如何運作的和理解如何優化你的JavaScript代碼同等重要。

結論出來了,V8爲node.js帶來了一套優秀的語言解釋方案。
http://www.alloyteam.com/2012/11/performance-writing-efficient-javascript/

爲什麼V8這麼快.pdf
http://www.greenpublishers.com/neat/200901/3coverstory.pdf

三、說那麼久,node.js 的性能到底如何?
C++ VS node.js
http://www.jiangmiao.org/blog/2195.html

node.js調研與服務性能測試**
http://www.tbdata.org/archives/1285

總結來說,性能還不錯

四、有什麼網站實際應用了node.js?
https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node


發佈了112 篇原創文章 · 獲贊 37 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章