前端(Node.js)(1)-- 初識Node.js
1、認識 Node.js
誕生、發展、應用現狀、生態圈等方面
1.1、
2008年
RyanDahl的目標是建立一個易擴充套件、適用於現代Web應用通訊的伺服器平臺
1.2、國內外的應用情況
LinkedIn移動版From ROR to Node.js,base on Joyent
Paypal From Java to Node.js
Twitter的佇列:收集需要儲存從Tweets,傳給負責寫入的程序
知乎的推送
網易
阿里
各種創業團隊
1.3、主要應用領域
RESTFul API
實時通訊:如訊息推送等
高併發
I/O阻塞
1.4、社群
生於社群
社群推進
Github
國內
1.5、生態圈
以NPM為中心
基礎服務提供商的支援
周邊服務提供商的支援
1.6、知名度較高的Node.js開源專案
express(web伺服器框架)
PM2(Node本來是單程序,PM2實現和管理多程序)
jade(優秀的模板引擎,還支援其他一些語言)
coffeeScript(JavaScript的轉義語言(類似於python),相對JS它更加簡潔、具有更好的高毒性,coffeescript的程式碼也可以轉換為JS的程式碼,有很多js程式碼和Node.js程式碼是用coffeescript完成的)
itom(文字編譯器,主要使用coffeescript完成,他的檔案系統子程序管理以及用於除錯和測試的伺服器部分都是使用Node.js來支撐的)
socket.io是一個實時通訊框架(應用他可以在Node.js中方便地使用websocket進行通訊)
Pomelo是一個網易公司推出的一個策略遊戲伺服器端框架,mongoose是Node.js中使用mongodb的擴充套件、mocha是功能強大的Nnode.js測試框架
1.7、IO.js
Joyent的目標:相容性、效能
社群:New features
IO.js: A friendly fork of Node.js with an open governance model
現狀: IO.js的發展速度成為了有史以來成長最快的開源專案
關係:全面相容,二者依然有可能並存
2、Node.js 與 JavaScript 的關係
誕生、發展、2004年以後的新浪潮、伺服器端執行 JavaScript 的解決方案,以及 Node.js 與 JavaScript 之間的關係
2.1、JavaScript的誕生
1995年
JavaScript誕生:Branden Eich,10天時間
JavaScript的目標:業餘人士,瀏覽器上的指令碼語言
2.2、ECMAScript與DOM/BOM
1996-08,包含JScript的IE3.0釋出
1996-11,Netscape將JavaScript提交給ECMA
1997-06,ECMA-262釋出
JavaScript = ECMAScript + DOM + BOM
2.3、Gmai與GoogleV8
2004-04-01,Gmail釋出
2005-0208,Google Maps釋出,後又推出街景服務
2008-09-02,Google Chrome釋出,一同面世的還有V8
2.4、新浪潮中的前端框架
DOM操作:jQuery/ExtJS/YUI
結構化前端框架:AngularJS/backbone.js/Ember.js
2.5、在伺服器上執行JavaScript的嘗試
Rhino引擎
javax.script API
2.6、Node為何選擇了JavaScript
原生支援非同步
歷史包袱
開發門檻
2.7、Node.js與JavaScript的關係 -- 另一種實現:Fibjs
{fib:JS}
2.8、全棧語言:JavaScript
前端:AngularJS、BACKBONE.JS、emben
後端:Node.js、{fib:JS}
移動端:PhoneGap、ReactNative
3、Node.js 的特點
優點與缺點
3.1、部署簡單方便
環境配置簡單,只需要安裝Node.js即可
注重約定
專案所需要擴充套件、外掛、資源相對獨立,不易衝突
3.2、事件驅動
主要觀點:根據當前出現的事件,調動資源進行相關的處理
3.3、非同步程式設計
3.4、非同步程式設計
非同步的實現方式
回撥函式
事件監聽
訂閱/釋出
3.5、高效與效能
單個操作的效能並不優於其它解決方案
通過優化資源調配和I/O操作來實現高效
其它語言對IO的處理:
PHP:原地等待,開多程序
C/C++:利用執行緒,程式要自己維護執行緒和資源的狀態
3.6、單執行緒與多執行緒
Google V8 是單執行緒的,所以與Node.js同樣是單執行緒的。為了更好地利用CPU資源,可以利用子程序和多程序:
子程序:Node.js的child_process模組
多程序:PM2等等第三方工具
3.7、Node.js的缺點
大量採用匿名函式,使得丟擲的異常不易閱讀
try/catch限於同步程式碼,使得異常捕獲較為複雜
單執行緒:可靠性
不適合CPU密集型的場景
回撥的程式碼習慣影響閱讀
3.8、你需要著重瞭解以下知識
Node.js的應用領域
Node.js的特點與缺點