前端有必要去學(xué)Node.js嗎?
Node近兩年已經(jīng)成為前端知識(shí)棧必備技能之一。隨便點(diǎn)開(kāi)招聘網(wǎng)站找個(gè)崗位幾乎都會(huì)要求會(huì)Node,更不用提一些高級(jí)崗位了。
可能你看過(guò)Node是什么,看過(guò)Node的文檔,用Node寫(xiě)過(guò)一些小項(xiàng)目。但是你知道在一線互聯(lián)網(wǎng)企業(yè)里,Node真正是怎么用的嗎?是拿來(lái)做什么的?怎么做?
我相信百分之八十的人都不知道答案,甚至包括一些用Node寫(xiě)過(guò)博客,小站點(diǎn)的前端程序員,可能都是復(fù)制粘貼。這也是大家對(duì)于學(xué)習(xí)很容易出現(xiàn)的問(wèn)題:我學(xué)會(huì)了這個(gè)框架(技術(shù))的所有API,但是我不知道如何靈活的在項(xiàng)目應(yīng)用它。接下來(lái)本篇文章會(huì)給大家做一個(gè)介紹:
作為中間層
我們通常說(shuō)前端和后端,前端負(fù)責(zé)用戶(hù)界面,而后端負(fù)責(zé)提供數(shù)據(jù)和業(yè)務(wù)接口。現(xiàn)在我們?cè)趦烧唛g加入一層,前端并不是直接去請(qǐng)求后端業(yè)務(wù)接口,而是請(qǐng)求到中間層。再由中間層去請(qǐng)求業(yè)務(wù)接口,看一下示意圖:

整個(gè)流程可以描述為:客戶(hù)端直接請(qǐng)求到中間層的Node服務(wù),Node服務(wù)分析請(qǐng)求,看需要哪個(gè)頁(yè)面,再去請(qǐng)求對(duì)應(yīng)數(shù)據(jù),拿到數(shù)據(jù)后和模版結(jié)合成用戶(hù)看到頁(yè)面,再給到客戶(hù)端。
那么有的人可能會(huì)覺(jué)得,這種模式不是更麻煩了嗎?其實(shí)不然,我們來(lái)看看中間層的優(yōu)點(diǎn):
1. 減輕客戶(hù)端內(nèi)存,項(xiàng)目用戶(hù)體驗(yàn)好。不會(huì)像mvvm模式的項(xiàng)目把頁(yè)面渲染和數(shù)據(jù)請(qǐng)求都?jí)涸诳蛻?hù)端,而是在服務(wù)端完成。
2. SEO性好,不像mvvm模式頁(yè)面由js生成,而是在服務(wù)器渲染好html 字符,有利于網(wǎng)頁(yè)被搜索到。
3. 保持了前后端分離的優(yōu)點(diǎn)和目的,即解放后端,后端可以繼續(xù)以接口的形式寫(xiě)業(yè)務(wù)代碼。
4. 前端可以操控的范圍增多,甚至可以做服務(wù)器,數(shù)據(jù)庫(kù)層面的優(yōu)化,比如中間層中常常用nginx,redis來(lái)優(yōu)化項(xiàng)目,應(yīng)對(duì)高并發(fā)。
中間層模式是一種開(kāi)發(fā)模式上的進(jìn)步,為什么這么好的模式我從來(lái)沒(méi)有聽(tīng)說(shuō)過(guò)呢?因?yàn)檫@種模式成本過(guò)高,如果沒(méi)有一定量級(jí)的項(xiàng)目沒(méi)必要去采用。
目前很多一線大廠已經(jīng)在使用了,比如淘寶、Facebook(php寫(xiě)的中間層)。互聯(lián)網(wǎng)的潮流往往都是一線互聯(lián)網(wǎng)公司開(kāi)始普及的,一線互聯(lián)網(wǎng)公司開(kāi)始大規(guī)模采用,慢慢的會(huì)變成普通公司也開(kāi)始普及,所以這也是我們想在將來(lái)穩(wěn)住自己工作的必備技能。但是目前中間層的資料十分少,學(xué)習(xí)起來(lái)可以說(shuō)困難重重。
做項(xiàng)目構(gòu)建工具
這里說(shuō)的項(xiàng)目構(gòu)建工具,我相信大家都用過(guò),比如現(xiàn)在市面上最常用的webpack就是其中之一。那么大家覺(jué)得這一類(lèi)工具神奇好用方便的同時(shí),有沒(méi)有想過(guò)這些工具是拿什么語(yǔ)言寫(xiě)的?其實(shí)它們并不難,這些工具都是用Node來(lái)寫(xiě)的。
很多公司都會(huì)開(kāi)發(fā)自己公司的項(xiàng)目構(gòu)建工具,幫助公司項(xiàng)目做的更標(biāo)準(zhǔn)更方便,一個(gè)好的項(xiàng)目構(gòu)建工具,會(huì)極大的加快整個(gè)公司的項(xiàng)目開(kāi)發(fā)效率。
這一類(lèi)的項(xiàng)目構(gòu)建工具一般都要很多的文件操作,Node對(duì)于i/o流的操作,在目前的主流后端語(yǔ)言中數(shù)一數(shù)二。所以越來(lái)越多的公司選擇用Node來(lái)做項(xiàng)目構(gòu)建工具。
做一些小型網(wǎng)站后端
用Node做后端,可能是大多數(shù)人認(rèn)為的Node作用。其實(shí)真正在企業(yè)之中,很少會(huì)讓你去用Node去做后端。 所以一般來(lái)說(shuō)都是做一些小型或者個(gè)人站的后端。
Node學(xué)習(xí)路線
那么我們?nèi)绾螌W(xué)習(xí)Node呢?這里給大家推薦一個(gè)Node學(xué)習(xí)路線:
1. 學(xué)習(xí)基礎(chǔ)服務(wù)器,http協(xié)議知識(shí)
2. 學(xué)習(xí)Node的API
3. 嘗試用Node做具體功能
4. 學(xué)習(xí)express,koa,egg等框架
5. 學(xué)習(xí)Node如何做前面說(shuō)的三個(gè)實(shí)際應(yīng)用
整個(gè)學(xué)習(xí)路線看起來(lái)并不復(fù)雜,但1,2,3這三個(gè)基礎(chǔ)知識(shí)點(diǎn),學(xué)起來(lái)也是十分耗神耗時(shí)間的。
尤其到了后面的三個(gè)實(shí)際應(yīng)用,更是難倒了想學(xué)習(xí)的你,因?yàn)橘Y料實(shí)在太少。而且這種實(shí)戰(zhàn)的東西,沒(méi)人帶著走一遍實(shí)在是很難掌握住。