作者:Draveness
學(xué)習(xí) Node.js 的路線圖我是在知乎找到的?我目前學(xué)習(xí) Node.js 的方式就是按照這個得票最高的答主的答案學(xué)習(xí)的.
現(xiàn)在由于對 Node.js 并不是很熟悉, 所以只來談一談這幾天學(xué)習(xí) Node.js 的感受吧.
Node.js入門
關(guān)于 《Node.js 入門》 這本書寫的還是非常好的. 不過讀這本書之前或者說學(xué)習(xí) Node.js 之前還是點亮 Javascript 這個前置技能比較好.
console.log("Hello?World");
Node.js權(quán)威指南
《Node.js 權(quán)威指南》?寫的如何我并不能做出評論, 不過書中使用的 Express 框架, 也就是 Node.js 中用于搭建 Web 服務(wù)器的框架版本巨低, 很多代碼根本無法運行, 所以我不是很推薦, 因為我在這本書的閱讀過程(寫書中的實例代碼)中還是極其痛苦的, 完全無法快樂的玩耍 (/= _ =)/~┴┴, 而無法快樂的寫代碼與我的信仰是沖突的 ( ̄^ ̄), 我只能放棄了.
varhttp?=require('http');
varserver?=?http.createServer(function(request,?response){
response.writeHead(200,?{"Content-Type":"text/plain"});
response.end("Hello?World\n");
});
server.listen(8888);
console.log("Server?running?athttp://127.0.0.1:8888/");
順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學(xué)習(xí)前端的小伙伴可以加入我們一起學(xué)習(xí),互相幫助。群里每天晚上都有大神免費直播上課,如果不是想學(xué)習(xí)的小伙伴就不要加啦。
Node.js并不是一門語言
對一種技術(shù)的尊重, 第一件事是要叫對它的名字, 總有人把?Objective-C?寫成?object c?我真是受不了啊…就算不寫這么長, 寫?OC好么… 對于我這種強迫癥患者跟本無法忍受.
同理 Node.js 并不是一門語言, 而是一個平臺:
Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications.
這個從?Node.js 官網(wǎng)?上扒下來的話已經(jīng)非常清楚地道明了,這貨是一個平臺, 不是一門語言. 我在這篇 post 中也會重視這一點, 時刻提醒自己與各位.
Express
Express?是基于 Node.js 的 Web 框架, 其實各種腳本語言, Ruby, Python, Node.js(并不是語言) 的 Web 框架使用起來在大體上是差不多的.
Sinatra:
get'/hi'do
"Hello?World!"
end
Flask:
@app.route("/")
def?hello():
return"Hello?World!"
Express:
app.get('/',function(req,?res){
res.send('hello?world');
});
可以看到這三個框架在使用上或者說形式是相似的. 但是, 它們也有很多的不同.
其實只要你長時間做 Web 開發(fā), “精通”這些框架中的一個, 其它不同”語言”的框架也是很容易掌握的. 關(guān)鍵之處在于理解它們的使用場景和細(xì)節(jié)上的不同之處.
比如說:
Node.js 比較適合實現(xiàn)高并發(fā) IO 系統(tǒng), 而不適合高 CPU/內(nèi)存消耗的計算.
總有人會許尋找適合所有領(lǐng)域的技術(shù), 而這樣的技術(shù)在目前來看是不存在的, 而什么時候會存在, 只有天知道了.?
順便給大家推薦一個裙,它的前面是 537,中間是631,最后就是 707。想要學(xué)習(xí)前端的小伙伴可以加入我們一起學(xué)習(xí),互相幫助。群里每天晚上都有大神免費直播上課,如果不是想學(xué)習(xí)的小伙伴就不要加啦。
事件驅(qū)動
接下來講一下 Node.js 中的一個很重要的概念, 就是事件驅(qū)動.
Node.js 是事件驅(qū)動的.
編程范式?
第一次聽到事件驅(qū)動這個概念, 我的第一想法是這是一種編程范式么? 于是我又翻開了?CTMCP, 看了一下這本書的目錄, 并沒有找到事件驅(qū)動這個編程范式.
于是我求助了 Google,?事件驅(qū)動程序設(shè)計,其實我并沒有看懂,不過看到這里, 雖然 CTMCP 中沒有提到, 不過這確實是一種編程范式.
回調(diào)函數(shù)
Node.js 的事件驅(qū)動是基于一個回調(diào)函數(shù)的. 當(dāng)某個事件發(fā)生時, 這個回調(diào)函數(shù)才會被調(diào)用, 而不像傳統(tǒng)的編程范式操作都是線性運行的: 如果需要用戶的輸入, 就會一直等待直到用戶輸入完成.
在 Node.js 中當(dāng)發(fā)生了用戶輸入這個時間之后才回去調(diào)用回調(diào)函數(shù)完成之后的工作, 這也就是為什么
Node.js 比較適合實現(xiàn)高并發(fā) IO 系統(tǒng).
總結(jié)
學(xué)習(xí) Node.js 的主要目的是為我的 iOS 應(yīng)用搭建 Web api, 所以, 我并沒有選擇 Express 而是選擇了?restify, 這是一個專門用于搭建 Web api 的框架, 沒有模板啊與 Web 前端相關(guān)的東西.
接下來我會繼續(xù)學(xué)習(xí) Node.js 尤其是 restify, “精通”這門優(yōu)雅的”語言”.
備注
① 知乎上的Node.js學(xué)習(xí)路線:
https://www.zhihu.com/question/21567720
② 《Node入門》:
https://www.nodebeginner.org/index-zh-cn.html
③ 《Node.js權(quán)威指南》:作者 陸凌牛
④ Node.js官網(wǎng):
https://nodejs.org/en/