應(yīng)該在業(yè)余項(xiàng)目使用 Node.js
有一種東西,把軟件行業(yè)的人們聯(lián)系在了一起:我們喜歡創(chuàng)造能夠運(yùn)行的東西。完成一個(gè)功能、或剛好符合預(yù)期的項(xiàng)目,是最讓人滿意的。對(duì)于我的業(yè)余項(xiàng)目(side projects),我熱愛(ài)學(xué)習(xí)新框架、技術(shù)和語(yǔ)言。但是到了***,最有收獲和欣慰的地方,是完成了項(xiàng)目并對(duì)外發(fā)布了某些東西。老實(shí)講,如果你有全職工作,擔(dān)心鍛煉身體、雜事和可能還要睡覺(jué),那么,常常難以找到完成業(yè)余項(xiàng)目的時(shí)間,當(dāng)我談到這個(gè)問(wèn)題時(shí),你會(huì)理解的。借助提前規(guī)劃,或許利用一些不錯(cuò)的項(xiàng)目管理工具,我們就可以幫助自己。但是我們的技術(shù)棧怎么樣?如果完成并發(fā)布項(xiàng)目是我們的目標(biāo),那么挑選一種能夠較好適應(yīng)快速開(kāi)發(fā)的技術(shù)棧就顯得十分重要了。
Node.js 已經(jīng)成為流行的服務(wù)器端平臺(tái),用作很多現(xiàn)代 web 應(yīng)用程序的 web 服務(wù)器。在開(kāi)發(fā) Node.js 應(yīng)用程序時(shí),你將使用 JavaScript 編寫所有東西,還能夠在任何一種類型的服務(wù)器(Windows、Mac 或 Linux)上運(yùn)行你的應(yīng)用程序。Node.js 由大量的限定范圍的模塊(module) 和 包(package) 組成,你可以將它們利用起來(lái)。盡管如此,你***取你所需,確保你的應(yīng)用程序盡可能地輕量級(jí)。在一天結(jié)束時(shí),你應(yīng)該享受業(yè)余項(xiàng)目,Node.js 應(yīng)用程序?qū)懫饋?lái)比較有樂(lè)趣。
1.Node.js 究竟是什么?
Node.js 本身只是一種運(yùn)行時(shí)環(huán)境,適合使用 JavaScript 來(lái)編寫服務(wù)器端應(yīng)用程序。Node.js 不是 JavaScript 框架,但是大部分 Node.js 應(yīng)用程序使用了框架。Express.js 是***的 Node.js 框架,有著出色的文檔和海量的優(yōu)秀資源。因此對(duì)于 Node.js web 應(yīng)用程序棧而言,你應(yīng)安裝 Node.js 和 Express.js 來(lái)運(yùn)行你的 web 服務(wù)器,這將成為一個(gè)快速、輕量級(jí)的中間人,它能夠在你的客戶端和數(shù)據(jù)庫(kù)之間迅速地傳遞請(qǐng)求和響應(yīng)。
2.你不應(yīng)該使用 Node.js 的場(chǎng)景
在我們深入 Node.js 開(kāi)發(fā)的精彩部分之前,讓我們首先說(shuō)清楚你不應(yīng)該使用 Node.js 的情況。
如果你要開(kāi)發(fā)的應(yīng)用程序涉及到 CPU 密集型的操作,你就不應(yīng)該使用 Node.js。Node.js 是單線程的,在服務(wù)器上運(yùn)行要耗費(fèi)太長(zhǎng)時(shí)間,會(huì)拖垮應(yīng)用程序的性能。對(duì)于服務(wù)器上任何種類的大數(shù)據(jù)集,你的應(yīng)用程序都不應(yīng)該處理它們。要么把這部分工作轉(zhuǎn)移到數(shù)據(jù)庫(kù),要么粗暴地切換到更適合的平臺(tái)上。
如果你不喜歡 JavaScript 開(kāi)發(fā),你就不應(yīng)該使用 Node.js。你應(yīng)該享受業(yè)余項(xiàng)目,不要因?yàn)榫W(wǎng)上有人告訴你這樣做,就把不愉快的東西強(qiáng)加給自己。但是在你放棄之前,聽(tīng)我把話說(shuō)完,我遇到過(guò)很多人,他們漠視著 JavaScript,甚至沒(méi)有給 JavaScript 一個(gè)公平的機(jī)會(huì)。剛開(kāi)始時(shí),JavaScript 貌似狂野、難以駕馭,不過(guò)當(dāng)你學(xué)會(huì)了如何正確地使用,你就能看到它的力量有多大了。JavaScript 是應(yīng)用最廣泛的編程語(yǔ)言之一,隨著 ECMAScript 6 的發(fā)布,它將變得更好。
3.JavaScript ——前端和后端
讓我們深入了解一下,Node.js ***化你的業(yè)余項(xiàng)目生產(chǎn)力的方式。JavaScript 已經(jīng)接管了互聯(lián)網(wǎng),不再單純用于瑣碎功能。對(duì)于很多現(xiàn)代 web 應(yīng)用程序,運(yùn)行在客戶端的核心功能是由 JavaScript 提供的。除了改善用戶體驗(yàn),它還從 web 服務(wù)器分擔(dān)了大量工作。還記得之前我們討論的輕量級(jí)的服務(wù)器嗎?讓客戶端的瀏覽器承擔(dān)自己的工作,這樣我們就能夠充分利用 Node.js 的***力量——減輕快捷的 I/O。
應(yīng)用程序邏輯在前后端之間傳播;對(duì)于我們這些 Node.js 開(kāi)發(fā)人員,我們能夠幸運(yùn)地在前后端使用完全相同的編程語(yǔ)言。大部分開(kāi)發(fā)人員對(duì)于上下文切換的成本,已經(jīng)有了更多的認(rèn)識(shí)。不得不把你的思維重新聚焦和調(diào)整在新任務(wù)、新語(yǔ)言、以及新問(wèn)題上,常常會(huì)讓開(kāi)發(fā)人員耗費(fèi)一些寶貴的有效率的時(shí)間。減少上下文之間切換的距離,使我們?cè)诟鞣N任務(wù)的處理上游刃有余,相應(yīng)的恢復(fù)時(shí)間也更加迅速。
4.JSON——數(shù)據(jù)叢林之王
對(duì)于服務(wù)器端和客戶端之間的數(shù)據(jù)傳輸,JSON(JavaScript Object Notation)【注1】已經(jīng)成為事實(shí)上的數(shù)據(jù)格式。根據(jù)我在其它平臺(tái)上開(kāi)發(fā) web 應(yīng)用程序的經(jīng)歷,把你的數(shù)據(jù)轉(zhuǎn)換成各種格式和模型,所花費(fèi)的時(shí)間是相當(dāng)驚人的。對(duì)于 Node.js 應(yīng)用程序,JSON 可以用在應(yīng)用程序的所有三個(gè)領(lǐng)域——客戶端、服務(wù)器端和數(shù)據(jù)庫(kù)。MongoDB 和 CouchDB 是流行的 NoSQL 數(shù)據(jù)庫(kù),使用 JSON 存儲(chǔ)數(shù)據(jù)。PostgreSQL,一個(gè)流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),也支持存儲(chǔ) JSON 對(duì)象。微軟甚至宣布 SQL Server 2016 將支持 JSON。有如此豐富的可選項(xiàng),就可輕松地給你的 Node.js 應(yīng)用程序挑選一種可靠數(shù)據(jù)庫(kù),以擠出每一點(diǎn)生產(chǎn)力,而不必?fù)?dān)心數(shù)據(jù)格式的轉(zhuǎn)換。
5.模塊——取你所需
業(yè)余項(xiàng)目的一個(gè)經(jīng)驗(yàn)法則就是保持小而專注。該法則有助于確保真正地完成你的項(xiàng)目。同樣的概念可在 Node.js 項(xiàng)目中找到——你只使用那些真正需要的模塊。這使得你的應(yīng)用程序足夠輕量級(jí)。和其它那些以企業(yè)為中心的平臺(tái)不同,你不會(huì)有大量根本用不到的額外東東。你的開(kāi)發(fā)和部署將更迅速,你的項(xiàng)目將占用更少空間,項(xiàng)目里的每樣?xùn)|西恰恰都是你需要的,你明白這些,內(nèi)心感到平靜。NPM(Node Package Manager)【注2】是 Node.js 應(yīng)用程序的一大賣點(diǎn)。它讓你簡(jiǎn)單快捷地訪問(wèn)所有公共 Node 模塊,選擇范圍超過(guò)了 150,000 個(gè)包。減少開(kāi)發(fā)時(shí)間、利用已有開(kāi)源軟件和工具,從未如此簡(jiǎn)單過(guò)。
6.總結(jié)
Node.js 給我們提供了一個(gè)了不起的應(yīng)用程序平臺(tái),因其高 I/O 需求而真正勝出的 web 應(yīng)用程序。如果你打算在下一個(gè)業(yè)余項(xiàng)目使用 Node.js,就盡量開(kāi)發(fā)一個(gè)輕量的 web 服務(wù)器 API,以最小化服務(wù)器端的真正負(fù)載。Node.js 極易理解,開(kāi)發(fā)人員學(xué)習(xí)和掌握起來(lái),相對(duì)容易些,為什么不嘗試一下呢?
7.我的下一步規(guī)劃
我想包含一些優(yōu)秀資源的簡(jiǎn)單清單,幫助我掌握 Node.js。
https://thinkster.io/mean-stack-tutorial/ :它是對(duì)我?guī)椭?**的教程。該教程結(jié)構(gòu)精妙,覆蓋了極有價(jià)值的海量?jī)?nèi)容。該教程免費(fèi),但是你還能付費(fèi),以訪問(wèn)到源代碼和視頻(當(dāng)時(shí)我為源代碼支付了 25 美元,不過(guò)他們好像變成了每月 20 美元的訂閱,就可看到他們的所有教程)。
http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js :一篇寫得不錯(cuò)的文章,幫助我理解了 Node.js 的優(yōu)點(diǎn)和缺點(diǎn)。
注1:JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構(gòu)想設(shè)計(jì)、輕量級(jí)的數(shù)據(jù)交換語(yǔ)言,以文字為基礎(chǔ),且易于讓人閱讀。盡管JSON是Javascript的一個(gè)子集,但JSON是獨(dú)立于語(yǔ)言的文本格式,并且采用了類似于C語(yǔ)言家族的一些習(xí)慣。https://zh.wikipedia.org/wiki/JSON
注2:Node包管理器(Node Package Manager)。它是一個(gè)javascript的軟件包管理系統(tǒng),默認(rèn)環(huán)境為Node.js,從Node.js0.6.3版本開(kāi)始,npm被自動(dòng)附帶在安裝包中。https://zh.wikipedia.org/wiki/Node%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8