2008年前端
RyanDahl的目標是建立一個易擴展、適用於現代Web應用通訊的服務器平臺java
LinkedIn移動版From ROR to Node.js,base on Joyentnode
Paypal From Java to Node.jspython
Twitter的隊列:收集須要保存從Tweets,傳給負責寫入的進程web
知乎的推送mongodb
網易express
阿里編程
各類創業團隊後端
RESTFul API瀏覽器
實時通訊:如消息推送等
高併發
I/O阻塞
生於社區
社區推動
Github
國內
以NPM爲中心
基礎服務提供商的支持
周邊服務提供商的支持
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測試框架
Joyent的目標:兼容性、性能
社區:New features
IO.js: A friendly fork of Node.js with an open governance model
現狀: IO.js的發展速度成爲了有史以來成長最快的開源項目
關係:全面兼容,兩者依然有可能並存
1995年
JavaScript誕生:Branden Eich,10天時間
JavaScript的目標:業餘人士,瀏覽器上的腳本語言
1996-08,包含JScript的IE3.0發佈
1996-11,Netscape將JavaScript提交給ECMA
1997-06,ECMA-262發佈
JavaScript = ECMAScript + DOM + BOM
2004-04-01,Gmail發佈
2005-0208,Google Maps發佈,後又推出街景服務
2008-09-02,Google Chrome發佈,一同面世的還有V8
DOM操做:jQuery/ExtJS/YUI
結構化前端框架:AngularJS/backbone.js/Ember.js
Rhino引擎
javax.script API
原生支持異步
歷史包袱
開發門檻
{fib:JS}
前端:AngularJS、BACKBONE.JS、emben
後端:Node.js、{fib:JS}
移動端:PhoneGap、ReactNative
環境配置簡單,只須要安裝Node.js便可
注重約定
項目所須要擴展、插件、資源相對獨立,不易衝突
主要觀點:根據當前出現的事件,調動資源進行相關的處理
回調函數
事件監聽
訂閱/發佈
單個操做的性能並不優於其它解決方案
經過優化資源調配和I/O操做來實現高效
其它語言對IO的處理:
PHP:原地等待,開多進程
C/C++:利用線程,程序要本身維護線程和資源的狀態
Google V8 是單線程的,因此與Node.js一樣是單線程的。爲了更好地利用CPU資源,能夠利用子進程和多進程:
子進程:Node.js的child_process模塊
多進程:PM2等等第三方工具
大量採用匿名函數,使得拋出的異常不易閱讀
try/catch限於同步代碼,使得異常捕獲較爲複雜
單線程:可靠性
不適合CPU密集型的場景
回調的代碼習慣影響閱讀
Node.js的應用領域
Node.js的特色與缺點