node.js非專業介紹
面向非專業程式設計師的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,有圖為證。
先看處理能力:
再看所佔資源:
就一個字,狀態穩定,多快好省!至於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
第一個是一旦開始讀檔案,就等著,讀完再接著幹別的。而第二個在開始讀檔案的同時給一個回撥函式,然後你讀你的,我該幹嘛幹嘛,等你讀完了,再呼叫回撥函式處理。所以第二個快,能充分利用快速的處理資源。
如果還有疑問,想了解更深層的技術問題,有四個字與你共勉:難得糊塗。對於我等非專業程式設計師,知道這個模式,知道實際效果已經夠了。
相關文章
- 聊聊畢業設計系列 --- 專案介紹
- Web專案開發介紹及實戰專案介紹Web
- 6.1 專案介紹
- 《沿途》專案介紹
- 介紹ServiceSelf專案
- 同步阻塞、同步非阻塞、多路複用的介紹
- Word文件太大怎麼壓縮,專業的方法介紹
- LVFS專案公告和介紹
- 非易失性儲存器MRAM技術介紹
- tornado原理介紹及非同步非阻塞實現方式非同步
- Node.js Event Loop 處理的幾大週期介紹Node.jsOOP
- 前端學習(2373):專案介紹前端
- .NET 開源專案 StreamJsonRpc 介紹JSONRPC
- 專案小組成員介紹
- QQ裝機部專案介紹
- 線上電影專案介紹
- linux作業系統介紹Linux作業系統
- 軟工作業-個人介紹軟工
- 從0開發一個iOS企業級專案效果介紹iOS
- [非專業翻譯] Mapster - 物件引用物件
- [非專業翻譯] Mapster - 配置位置
- 簡單介紹 Vue 3.0 專案建立Vue
- 《非常防護》專案詳細介紹
- .NET 開源專案 StreamJsonRpc 介紹[下篇]JSONRPC
- .NET 開源專案 StreamJsonRpc 介紹[中篇]JSONRPC
- Unity中專屬資料夾介紹Unity
- 圖書管理系統-專案介紹
- Maven專案之間關係介紹Maven
- OpenBionics假手專案介紹|BCIduino社群整理UI
- [非專業翻譯] Mapster - 依賴注入依賴注入
- [非專業翻譯] Mapster - 非同步支援非同步
- [非專業翻譯] Mapster - 對映配置
- [非專業翻譯] Mapster - 配置例項
- [非專業翻譯] Mapster - 對映忽略
- [非專業翻譯] Mapster - 對映器
- 超級賬本-頂級專案介紹
- Java爬蟲入門(一)——專案介紹Java爬蟲
- day01-專案介紹&功能實現
- 前端學習(2375):專案介紹結束前端