Node was installed at
/usr/local/bin/node
npm was installed at
/usr/local/bin/npm
Make sure that /usr/local/bin is in your $PATH.
node:硬件V8系吭,軟件語言JS颗品。
異步I/O:效率提高,使用回調(diào)函數(shù)则吟。
node是高性能的單線程的跨平臺的锄蹂。適合I/O(異步)密集和cpu密集型場景(V8)。
B/S 寨昙,C/S:聯(lián)系阿里思考掀亩。
使用require()方法引入模塊欢顷,模塊標(biāo)識:小駝峰字符串或者以·或··開頭的相對路徑,或者/開頭的絕對路徑炼七。模塊:核心模塊布持,文件模塊。
文件模塊:路徑分析题暖,文件定位捉超,編譯執(zhí)行唯绍。
對于核心模塊:不用文件定位和編譯執(zhí)行,在node源代碼編譯已經(jīng)完惜纸。而且對于任何模塊都有一個相當(dāng)于是瀏覽器緩存的概念绝骚。
優(yōu)先級:緩存》核心》路徑》自定義模塊
文件定位:可以不要擴展名。
編譯的時候?qū)τ诓煌愋偷奈募幾g方式不一樣粪牲。.js,.json,.node三種蛾魄,其他文件當(dāng)做.js處理。
require,exports,module三個關(guān)鍵字滴须!
http://blog.csdn.net/cike110120/article/details/12753253
http://www.2cto.com/kf/201401/274825.html
然后是不同語言的編譯:JS扔水,C/C++。
JS:node會對代碼進行包裝魔市,加上必須要的一些屬性,所以也就造成了exports和module.exports共存的情況君丁,實際上兩者的值大多數(shù)情況是相同的将宪。
c++執(zhí)行效率更高,但是編程門檻高印蔗,這里不多做介紹丑勤。
json文件最簡單,json.parse一個方法即可法竞。
JS代碼:首先是轉(zhuǎn)化為C++代碼强挫,然后編譯JS核心模塊纠拔。node的常見方式之一就是C++完成核心泛豪,JS實現(xiàn)封裝。node這種復(fù)合模式的優(yōu)勢得到體現(xiàn)诡曙。node的核心內(nèi)建模塊都是由C++編寫的。內(nèi)建模塊(C++)——→核心模塊(JS)—→文件模塊(用戶自定義)
C++在運算方面的效率比JS效率高太多了劝萤,所以我們很多時候需要寫C++擴展模塊.node文件慎璧,值得注意的是,各個平臺下的.node文件編譯出來是不一樣的厌处,需要重新編譯岁疼。P28頁圖是不同平臺的詳細(xì)編譯過程。
C++擴展工具:GYP項目生成工具捷绒,V8引擎C++庫暖侨,libuv庫,node內(nèi)部庫字逗。
接下來是第三方模塊,包和NPM是將各種模塊聯(lián)系在一起的一種機制。PS:require是這之中很關(guān)鍵的方法乘碑。包就是一個存檔文件,里面有關(guān)于這個包得各種信息套腹。這里不想追究太深。NPM可以理解為node的一種工具幢码,gem和ruby尖飞,pear和php一樣的關(guān)系。目前NPM已經(jīng)是一個共享平臺贞铣。到這里NODE規(guī)范就不看啦沮明。
異步I/O:產(chǎn)生的原因就是比如PHP這種同步阻塞的語言在復(fù)雜的環(huán)境中不能很好的并發(fā),用戶體驗就不好了荐健。從M+N到max(M,N)的進化,有一句話纺酸,只有后端快速響應(yīng)扛稽,前端體驗才能更好。
一個關(guān)鍵詞:輪詢用含。
輪詢的方式:
read→select→poll→epoll
linux原生:AIO支持面太小帮匾,不能利用系統(tǒng)緩存。
NODE的異步I/O的實現(xiàn):事件循環(huán)缸夹,tick螺句,觀察者。類比與飯館的流程:廚房蛇尚,服務(wù)員取劫,客戶研侣。
windows:IOCP炮捧,請求對象,
一些異步API:setTimeout末誓,setInterval傀蚌,setImmediate和process.nextTick
異步編程:函數(shù)式編程:高階函數(shù):把別的函數(shù)作為自己函數(shù)的參數(shù)類似于f(f(x)).
偏函數(shù)用法。
優(yōu)點:異步善炫,V8基礎(chǔ)上性能十分優(yōu)越。
缺點:
1窜醉,異常處理上艺谆,由于是異步的,所以在出現(xiàn)異常的情況下琅催,難以解決虫给,這里有兩個原則,
1缠黍,必須執(zhí)行調(diào)用者傳入的回調(diào)函數(shù)药蜻。2,正確傳遞回異常供調(diào)用者判斷贸典。
2踱卵,函數(shù)嵌套過深。
3,阻塞代碼
4,多線程編程
5饥漫,異步轉(zhuǎn)同步罗标。
4.3解決方案:為了解決上面的五個問題,下面介紹一些解決方案闯割。
1事件監(jiān)聽模式:events模塊宙拉,監(jiān)聽模式本身沒有異步同步的問題,只是發(fā)布調(diào)用多是伴隨事件循環(huán)異步觸發(fā)谢澈,所以廣泛應(yīng)用于異步編程。