# 前言
JavaScript開發者的時代:
不僅僅是H5規范塵埃落定,flash技術見隱江湖 智能終端的大眾普及
而是更具有劃時代意義的node.js推出,讓JavaScript流暢的運行在服務器端,徹底打破了前后端的語言邊界,解放了前端程序員的職責約束,走向一個嶄新的舞臺。
Node.js雖然帶了一個.js后綴,但是和Javascript沒有太大的關系
Node.js = Google(chrome)瀏覽器+V8引擎+C++語言 編寫
本質上是一個“JavaScript運行環境“
提到JavaScript,大家就會想到各種交互組件、異步請求、DOM、BOM等眾多內容。它需要依賴瀏覽器中的JS引擎,來解析JavaScript代碼
而Node.js這個運行環境,不僅僅是可以解析JS代碼,并且也沒有瀏覽器安全級的各種限制,同時還提供了許多系統級別的API,例如:1.文件的讀寫、2.進程的管理、3.網絡通信。
Node.js 是一個 Javascript 運行環境(runtime)。它讓 Java Script 可以開發后端程序,實現幾乎其他后端語言實現的所有功能,可以與 PHP、JSP、Python、Ruby 、Java等后端語言平起平坐。
Nodejs 是基于 V8 引擎,V8 是 Google 發布的開源 JavaScript 引擎,本身就是用于 Chrome 瀏覽器 的 JS 解釋部分,但是 Ryan Dahl 這哥們,鬼才般的,把這個 V8 搬到了服務器上,用于做服務器的軟件。

短短幾年的時間,Node 取得了巨大的成功。在企業界,Node 的應用也越來越廣泛,2016 年 nodeJS 官方的調查報告。2016 年全球有 350 萬開發者使用 nodeJS,相比去年保持了 100%的增長率。像 Yahoo、 Microsoft 這樣的大公司,有好多應用已經遷移到 Node 了。國內的阿里巴巴、網易、騰訊、新浪、百度等 公司的很多線上產品也紛紛改用 Node 開發,并取得了很好的效果。據統計很多 A 輪、 B 輪的創業公司更 喜歡使用 NodeJs 開發。

# 優勢
1. NodeJs 語法完全是 js 語法,只要你懂 JS 基礎就可以學會 Nodejs 后端開發
Node 打破了過去 JavaScript 只能在瀏覽器中運行的局面。前后端編程環境統一,可以大大降低開發成本。
2. NodeJs 超強的高并發能力
Node.js 的首要目標是提供一種簡單的、用于創建高性能服務器及可在該服務器中運行的各種應用程 序的開發工具。
首先讓我們來看一下現在的服務器端語言中存在著什么問題。
在 Java、PHP 或者.net 等服務器端語言
中,會為每一個客戶端連接創建一個新的線程。而每個線程需要耗費大約 2MB 內存
理論上,
一個 8GB 內存的服務器可以同時連接的最大用戶數為 4000 個左右
。要讓 Web 應用程序支持更多的用戶,就 需要增加服務器的數量,而 Web 應用程序的硬件成本當然就上升了。
。也就是說,
Node.js 不為每個客戶連接創建一個新的線程,而僅僅使用一個線程。當有用戶連接了,就觸發一個 內部事件,通過非阻塞 I/O、事件驅動機制,讓 Node.js 程序宏觀上也是并行的。使用 Node.js,一個 8GB 內存的服務器,可以同時處理超過4 萬用戶的連接。
3. 實現高性能服務器
嚴格地說,Node.js 是一個用于開發各種 Web 服務器的開發工具。在 Node.js 服務器中,運行的是高性能 V8
JavaScript 腳本語言,該語言是一種可以運行在服務器端的 JavaScript 腳本語言。
那么,什么是 V8 JavaScript 腳本語言呢?該語言是一種被 V8 JavaScript 引擎所解析并執行的腳本語言。V8 JavaScript 引擎是由 Google 公司使用 C++語言開發的一種高性能 JavaScript 引擎,該引擎并不局限于在瀏覽 器中運行。Node.js 將其轉用在了服務器中,并且為其提供了許多附加的具有各種不同用途的 API。例如, 在一個服務器中,經常需要處理各種二進制數據。在 JavaScript 腳本語言中,只具有非常有限的對二進制數 據的處理能力,而 Node.js 所提供的 Buffer 類則提供了豐富的對二進制數據的處理能力。
另外,在 V8 JavaScript 引擎內部使用一種全新的編譯技術。這意味著開發者編寫的高端的 JavaScript 腳本代 碼與開發者編寫的低端的C語言具有非常相近的執行效率,這也是Node.js服務器可以提供的一個重要特性。
4. 開發周期短、開發成本 低、學習成本低
Node.js 自身哲學,是花最小的硬件成本,追求更高的并發,更高的處理性能。
# NodeJs 適合做什么?
在短短幾年多的時間里,Node 變得非常熱門,使用者也非常多。這些使用者對于 Node 的
各自倚重點也各部相同,經過整理,主要有下幾類
? 前后端編程語言環境統一。這類倚重點的代表是雅虎。雅虎開放了 Cocktai 框架,利用 自己深厚的前端沉淀,將 YUI3 這個前端框架的能力借助 Node 延伸到服務器端,使得使用 者擺脫了日常工作中一邊寫 JavaScript—邊寫 PHP 所帯來的上下文交換負擔。
? Node 帶來的高性能 I/0 用于實時應用。Voxer 將 Node 應用在實時語音上。國內騰訊的 朋友網將 Node 應用在長連接中,以提供實時功能,花瓣網、蘑菇街等公司通過 socket.io 實 現實時通知的功能。
? 并行 I/0 使得使用者可以更高效地利用分布式環境。阿里巴巴 eBay 是這方面的典型。 阿里巴巴的 NodeFox 和 eBay 的 ql.io 都是借用 Node 并行 I/O 的能力,更高效地使用已有的 數據。
? 并行 I/O ?有效利用穩定接口提升 Web 渲染能力。雪球財經和 Linkedln 的移動版網站均 是這種案例,撇棄 同步等待式的順序請求,大膽采用并行丨/〇,加速數據的獲取進而提升 Web 的渲染速度。
? 云計算平臺提供 Node 支持。微軟將 Node 引入 Azure 的開發中,阿里云、百度均紛紛 在云服務器上提供 Node 應用托管服務,Joyent 更是云計算中提供 Node 支持的代表。這類 平臺看重 JavaScript 帶來的開發上的優勢,以及低資源占用、高性能的特點。
? 游戲開發領域。游戲領域對實時和并發有很高的要求,網易開源了 pomelo 實時框架, 可以應用在游戲和高實時應用中。
? 工具類應用。過去依賴 java 或其他語言構建的前端工具類應用,紛紛被一些前端工程 師用 Node 重寫,用前端熟悉的語言為前端構建熟悉的工具。

二、 為什么學習Node.js
1. 它很火
2. 它很強 Node-Webkit appjs jade ghost grunt express.js gulp nodecast log.io nodeOS Imdex Filsh Forever PDFKit Hyro NoduinoWeb Haroopad
很火,很強怎能不學?OK,怎么學?推薦一下幾個學習的網站:
1. nodejs.org(nodejs的官網)
2. npmjs.com
3. github.com
4.stackoverflow.com