簡單的說 Node.js 就是運行在服務端的 JavaScript。Node.js 是一個 Javascript 運行環境(runtime)。它讓 JavaScript 能夠開發後端程序,實現幾乎其餘後端
語言實現的全部功能,能夠與 PHP、JSP、Python、Ruby 等後端語言分庭抗禮。
Node.js 是一個基於Chrome JavaScript 運行時創建的一個平臺。
Node.js是一個事件驅動I/O服務端JavaScript環境,基於Google的V8引擎,V8引擎執行Javascript的速度很是快,性能很是好。
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 開發;前端
因爲 node.js 引擎跨平臺特性,理所固然的在嵌入式平臺上運行起來,而且提供了事件
驅動,非阻塞 I/O 模型,輕量,高效,跨平臺等優秀特性,適應了新型物聯網嵌入式開發的潮
流。java
若是你是一個前端程序員,你不懂得像PHP、Python或Ruby等動態編程語言,而後你想建立本身的服務,那麼Node.js是一個很是好的選擇。node
Node.js 是運行在服務端的 JavaScript,若是你熟悉Javascript,那麼你將會很容易的學會Node.js。程序員
固然,若是你是後端程序員,想部署一些高性能的服務,那麼學習Node.js也是一個很是好的選擇。編程
在短短几年多的時間裏,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 打破了過去 JavaScript 只能在瀏覽器中運行的局面。先後端編程環境統一,能夠大大下降開發
成本瀏覽器
Node.js 的首要目標是提供一種簡單的、用於建立高性能服務器及可在該服務器中運行的各類應用程
序的開發工具。
首先讓咱們來看一下如今的服務器端語言中存在着什麼問題。 在 Java、PHP 或者.net 等服務器端語言
中,會爲每個客戶端鏈接建立一個新的線程。而每一個線程須要耗費大約 2MB 內存。也就是說,理論上,
一個 8GB 內存的服務器能夠同時鏈接的最大用戶數爲 4000 個左右。要讓 Web 應用程序支持更多的用戶,就
須要增長服務器的數量,而 Web 應用程序的硬件成本固然就上升了。
Node.js 不爲每一個客戶鏈接建立一個新的線程,而僅僅使用一個線程。當有用戶鏈接了,就觸發一個
內部事件,經過非阻塞 I/O、事件驅動機制,讓 Node.js 程序宏觀上也是並行的。使用 Node.js,一個 8GB
內存的服務器,能夠同時處理超過 4 萬用戶的鏈接。前端框架
嚴格地說,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 服務器能夠提供的一個重要特性。服務器
Node.js 自身哲學,是花最小的硬件成本,追求更高的併發,更高的處理性能。
官網:https://nodejs.org/en/
特色:Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and
efficient.併發
衆所周知,在Netscape設計出JavaScript後的短短几個月,JavaScript事實上已是前端開發的惟一標準。
後來,微軟經過IE擊敗了Netscape後一統桌面,結果幾年時間,瀏覽器毫無進步。(2001年推出的古老的IE 6到今天仍然有人在使用!)
沒有競爭就沒有發展。微軟認爲IE6瀏覽器已經很是完善,幾乎沒有可改進之處,而後解散了IE6開發團隊!而Google卻認爲支持現代Web應用的新一代瀏覽器纔剛剛起步,尤爲是瀏覽器負責運行JavaScript的引擎性能還可提高10倍。
先是Mozilla藉助已壯烈犧牲的Netscape遺產在2002年推出了Firefox瀏覽器,緊接着Apple於2003年在開源的KHTML瀏覽器的基礎上推出了WebKit內核的Safari瀏覽器,不過僅限於Mac平臺。
隨後,Google也開始建立自家的瀏覽器。他們也看中了WebKit內核,因而基於WebKit內核推出了Chrome瀏覽器。
Chrome瀏覽器是跨Windows和Mac平臺的,而且,Google認爲要運行現代Web應用,瀏覽器必須有一個性能很是強勁的JavaScript引擎,因而Google本身開發了一個高性能JavaScript引擎,名字叫V8,以BSD許可證開源。
現代瀏覽器大戰讓微軟的IE瀏覽器遠遠地落後了,由於他們解散了最有經驗、戰鬥力最強的瀏覽器團隊!回過頭再追趕卻發現,支持HTML5的WebKit已經成爲手機端的標準了,IE瀏覽器今後與主流移動端設備絕緣。
瀏覽器大戰和Node有何關係?
話說有個叫Ryan Dahl的歪果仁,他的工做是用C/C++寫高性能Web服務。對於高性能,異步IO、事件驅動是基本原則,可是用C/C++寫就太痛苦了。因而這位仁兄開始設想用高級語言開發Web服務。他評估了不少種高級語言,發現不少語言雖然同時提供了同步IO和異步IO,可是開發人員一旦用了同步IO,他們就再也懶得寫異步IO了,因此,最終,Ryan瞄向了JavaScript。
由於JavaScript是單線程執行,根本不能進行同步IO操做,因此,JavaScript的這一「缺陷」致使了它只能使用異步IO。
選定了開發語言,還要有運行時引擎。這位仁兄曾考慮過本身寫一個,不過明智地放棄了,由於V8就是開源的JavaScript引擎。讓Google投資去優化V8,咱只負責改造一下拿來用,還不用付錢,這個買賣很划算。
因而在2009年,Ryan正式推出了基於JavaScript語言和V8引擎的開源Web服務器項目,命名爲Node.js。雖然名字很土,可是,Node第一次把JavaScript帶入到後端服務器開發,加上世界上已經有無數的JavaScript開發人員,因此Node一會兒就火了起來。
在Node上運行的JavaScript相比其餘後端開發語言有何優點?
最大的優點是藉助JavaScript天生的事件驅動機制加V8高性能引擎,使編寫高性能Web服務垂手可得。
其次,JavaScript語言自己是完善的函數式語言,在前端開發時,開發人員每每寫得比較隨意,讓人感受JavaScript就是個「玩具語言」。可是,在Node環境下,經過模塊化的JavaScript代碼,加上函數式編程,而且無需考慮瀏覽器兼容性問題,直接使用最新的ECMAScript 6標準,能夠徹底知足工程上的需求。
我還據說過io.js,這又是什麼鬼?
由於Node.js是開源項目,雖然由社區推進,但幕後一直由Joyent公司資助。因爲一羣開發者對Joyent公司的策略不滿,於2014年從Node.js項目fork出了io.js項目,決定單獨發展,但二者其實是兼容的。
然而中國有句古話,叫作「分久必合,合久必分」。分家後沒多久,Joyent公司表示要和解,因而,io.js項目又決定迴歸Node.js。
具體作法是未來io.js將首先添加新的特性,若是你們測試用得爽,就把新特性加入Node.js。io.js是「嚐鮮版」,而Node.js是線上穩定版,至關於Fedora Linux和RHEL的關係。
本章教程的全部代碼都在Node.js上調試經過。若是你要嘗試io.js也是能夠的,不過二者若是遇到一些區別請自行查看io.js的文檔。
物聯網嵌入式開發現狀和困境咱們知道,物聯網嵌入式開發都是以具體的求功能代碼,開發上特色也很鮮明:a、入門門檻較高,知識點很是零散b、平臺依賴很強,換平臺比較痛苦。c、開發中出現的問題較難定位,每每涉及到多個技術層d、公司多選擇閉源,對總體軟硬件生態的貢獻接近於零e、實踐多於理論,此領域的大牛可能是不斷的編程、驗證沒有捷徑。嵌入式開發的這些特色就註定了它的神祕、難度大拒絕更簡單的語言、更友好的封裝、更易用的平臺的。
從此的新型物聯網嵌入式,開發方式必定是朝着抽象化、簡單化、層次化的方向衍變,而且可能會派生出更多相似 node.js 的平臺,我也相信國內會有更多的開源愛好者加入到新型物聯網嵌入式的開發潮流,爲總體軟硬件生態作出更多貢獻