想用Node.js,老板不同意?
經(jīng)過(guò)這幾年的發(fā)展,前端普遍進(jìn)入了技術(shù)深水區(qū),只會(huì)Web頁(yè)面開(kāi)發(fā)已經(jīng)難以滿足企業(yè)需求,Node逐漸成為了剛性技能。但是很多同學(xué)還沒(méi)有在業(yè)務(wù)上使用過(guò)Node,也不知道使用Node會(huì)帶來(lái)哪些好處,更加沒(méi)有辦法說(shuō)服老板。
在翻看很多技術(shù)文章時(shí),大家都提到“中間層”,在很多大型企業(yè)中,Node確實(shí)承擔(dān)了“中間層”的角色,那么,Node為什么被廣泛的應(yīng)用在“中間層”呢?
要回答這個(gè)問(wèn)題,先來(lái)陳述下什么是中間層。
通常我們把Web領(lǐng)域分為客戶端和服務(wù)端,也就是前端和后端,這里的后端就包含了網(wǎng)關(guān),靜態(tài)資源,接口,緩存,數(shù)據(jù)庫(kù)等。而中間層呢,就是在后端這里再抽離一層出來(lái),在業(yè)務(wù)上處理和客戶端銜接更緊密的部分,比如頁(yè)面渲染(SSR),數(shù)據(jù)聚合,接口轉(zhuǎn)發(fā)等等。
以SSR來(lái)說(shuō),在服務(wù)端將頁(yè)面渲染好,可以加快用戶的首屏加載速度,避免請(qǐng)求時(shí)白屏,還有利于網(wǎng)站做SEO,他的好處是比較好理解的。那么對(duì)于數(shù)據(jù)的聚合,接口轉(zhuǎn)發(fā)來(lái)說(shuō),這樣做有什么意義呢?
這里從以下幾個(gè)角度分析
01、業(yè)務(wù)驅(qū)動(dòng)
Node有個(gè)突出的優(yōu)勢(shì),他的開(kāi)發(fā)者可以是前端。前端直接和產(chǎn)品交互對(duì)接,對(duì)于頁(yè)面所需要的數(shù)據(jù)有更好的理解。
每個(gè)頁(yè)面要用到哪些接口,每個(gè)接口要用到哪些字段前端是最清楚的,再加上實(shí)際業(yè)務(wù)開(kāi)發(fā)中,前端頁(yè)面需求經(jīng)常會(huì)發(fā)生變化,需要修改字段或者數(shù)據(jù)結(jié)構(gòu),所以對(duì)接頁(yè)面的這部分接口由前端直接開(kāi)發(fā)非常合適,可以顯著的減少溝通成本。
02、架構(gòu)需要
面向用戶的接口由Node中間層負(fù)責(zé)以后,真正的服務(wù)端可以專注于提供基于領(lǐng)域模型的對(duì)內(nèi)接口,做微服務(wù)。
比如可以基于Goods模型,提供所有商品相關(guān)的接口,基于Users模型,提供所有用戶相關(guān),當(dāng)一個(gè)接口需要商品+用戶信息時(shí),由Node分別查詢組裝。從整體業(yè)務(wù)代碼維護(hù)角度來(lái)說(shuō),變得更容易,不會(huì)因?yàn)闃I(yè)務(wù)發(fā)展使得每個(gè)接口都異常繁雜。
03、性能滿足
如果僅僅是架構(gòu)層面的需求,需要有一個(gè)中間層來(lái)沉淀業(yè)務(wù),那用Java,PHP也可以做到,為什么說(shuō)Node更適合做呢?
因?yàn)镹ode天生異步!
眾所周知,js是一門單線程語(yǔ)言,所以Node在實(shí)現(xiàn)的時(shí)候,需要借助libuv來(lái)實(shí)現(xiàn)異步。
如圖所示,libuv為Node提供了線程池,事件池,異步I/O等能力。
正是因?yàn)槠渲芯W(wǎng)絡(luò)I/O的異步能力,可以讓Node做接口聚合時(shí),能夠更高效的異步并發(fā)處理。
04、成本較低
Node使用js開(kāi)發(fā),只需要學(xué)習(xí)簡(jiǎn)單的api,前端開(kāi)發(fā)者就可以無(wú)障礙使用,學(xué)習(xí)成本很低。
而且,Node具有活躍的社區(qū)和豐富的模塊池,擁有很多現(xiàn)成的功能實(shí)現(xiàn),框架方面,也有成熟的koa,express等基本框架和egg等二次封裝框架,可根據(jù)需求選擇上手也比較方便。
有了以上幾點(diǎn)原因,實(shí)實(shí)在在的好處,相信各位同學(xué)已經(jīng)有充足理由可以說(shuō)服老板讓你使用Node啦。