node.js非專業介紹

海興發表於2013-04-22

面向非專業程式設計師的node.js介紹

介紹Node.js時,一般都會說它是執行在伺服器環境中的JavaScript直譯器,有了它,我們可以直接在伺服器上跑Javascript程式碼,就像跑PHP,ruby和java程式碼一樣。

實際上Node.js並不是唯一的服務端Javascript直譯器,它還有很多同類產品。而且Javascript最初就是用在服務端的程式語言。當年為了跟微軟在網際網路上搶地盤,網景要為非專業程式設計師打造一款小清新的解釋型語言,以便跟Java互補。終於在1994年12月推出了用在 Netscape Enterprise Server上的LiveScript,小名Mocha。1995年,這門語言起了個當時看來很洋氣的名字,Javascript。推出了客戶端版本,作為網景瀏覽器的一部分一起釋出,以便讓瀏覽器可以跟使用者互動,控制瀏覽器,跟後臺進行非同步通訊,並修改瀏覽器中所顯示的內容。可網景終於輸掉了這場戰爭,才使得服務端Javascript變成了今天的一個噱頭。

Node.js基於Google給Chrome瀏覽器寫的V8引擎,就職於Joyent 的 Ryan Dahl 1根據自己的需要做了些定製,比如讀寫檔案系統,以及處理HTTP請求、返回HTTP響應的能力。其技術上最大的賣點是非阻塞的I/O和基於事件的非同步處理機制。

Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.-- http://nodejs.org

不過這都不是什麼突破性創新,我看中的是他的簡單高效和龐大的類庫,下面是今天(2013年4月22日)npmjs.org上給出的資料:

Node Packaged Modules

  Total Packages: 28 092

     126 938     downloads in the last day
  8 502 793     downloads in the last week
31 970 743     downloads in the last month

1 開源軟體的生命力和他身後的支撐力量緊密相關。Ryan Dahl不是一個人在戰鬥,他現在把node.js掌門人的位置轉給了其同事Isaac Schlueter(npm的主創人員)

既然他吆喝自己的非阻塞I/O和基於事件的非同步式處理機制,我們就先來看一下這有什麼好處。技術上有一句至理名言:“萬般皆破,唯快不破”。所有拿得出手的東西,首先都要圍繞一個字做功夫。按非專業的說法,Node每秒可以用一個執行緒處理上千條請求,你甚至可以在一個執行緒上執行幾個HTTP伺服器。Nginx用的就是這項技術,完勝老大Apache,有圖為證

先看處理能力:

enter image description here

再看所佔資源:

enter image description here

就一個字,狀態穩定,多快好省!至於Node的圖。。。請領會精神,或參考專業人士的建議

至於他為什麼這麼強,我們先來看一個小例子:

阻塞版:

var text = readFileSync("sample.html")
console.log(text); // executed after the file has been read completely

非阻塞事件驅動版:

readFile("sample.html", function(err, text) {
    console.log(text); // executed after the file has been read completely 
});
console.log("xxx"); // this line will be executed immediately

第一個是一旦開始讀檔案,就等著,讀完再接著幹別的。而第二個在開始讀檔案的同時給一個回撥函式,然後你讀你的,我該幹嘛幹嘛,等你讀完了,再呼叫回撥函式處理。所以第二個快,能充分利用快速的處理資源。

如果還有疑問,想了解更深層的技術問題,有四個字與你共勉:難得糊塗。對於我等非專業程式設計師,知道這個模式,知道實際效果已經夠了。

相關文章