Node中間層實踐(一)——基於NodeJS的全棧式開發

版權聲明:更多文章請訪問個人我的站 Keyon Y,轉載請註明出處。

前言

近期公司有個新項目,因爲後端人手不足,我果斷的提議用node中間層的方案,獲得了老大的支持,因此一次大單嘗試就來了。
Node中間層容許前端來作網站路由頁面渲染SEO優化,對以往歷來不接觸這些內容的前端選手來講,正是鍛鍊咱們網站架構的好機會。
另外,這也是一次深刻了解Node的好機會,準備好迎接即將到來的前端工程化時代。html

爲何選擇node中間層

在說這個話題以前,先給你們分享一篇文章(【探索】NodeJS中間層搭建),它讓我對node中間層的理解更加深入,特別是最後的來自淘寶的PPT。前端

現有開發模式的適用場景

玉伯提到的幾種開發模式,各有各的適用場景,沒有哪種徹底取代另一種。node

  • 好比後端爲主的MVC,作一些同步展示的業務效率很高,可是遇到同步異步結合的頁面,與後端開發溝通起來就會比較麻煩。
  • Ajax爲主SPA型開發模式,比較適合開發APP類型的場景,可是隻適合作APP,由於SEO等問題很差解決,對於不少類型的系統,這種開發方式也太重。

先後端分離

從職責上劃分,node中間層實現了先後端分離:webpack

  • 前端:負責View和Controller層
  • 後端:只負責Model層,業務處理/數據等

拿咱們公司來講,以前的網站前臺的項目,是基於後端的MVC,在遇到同步和異步結合的頁面時候,和後端頻繁溝通,對先後端來講都是很痛苦的。git

對前端來講,發揮的空間十分的有限,例如:性能優化,只在前端作是頗有限的,是須要和後端配合才能實現的,好比 隨後的部分我會寫道的無刷新加載程序員

前端掌握了Controller,就能夠作路由設計、網站目錄結構、網站前端架構。
掌握了View,就能夠經過後端模板引擎(jade/pug,Ejs,swig等),邊寫邊綁數據。更別提,pug之流 還有mixin,讓咱們對 html進行函數化,大大提升效率。 github

NodeJS讓前端無需學習一門新的語言,就能作到這些事情。web

基於NodeJS「全棧」式開發

下面的這張圖很簡單形象的說明了Node中間層express

中間層的性能問題

多加了一層通信,確定會有必定的性能損耗。但分層帶來的損失,必定能在其餘方面的收益彌補回來,並且合理的分層能讓職責清晰、方便協做,大大提高開發效率。也能夠經過優化通信方式和協議,儘量把損耗降到最低。segmentfault

拿我公司的網站舉例:一個靜態化的詳情頁面上有不少(動態)的數據,用戶資料、評論信息、訂單等等,須要五、6個異步請求,node中間層能夠代理這些請求,輕鬆實現Bigpipe。
在PC上你以爲發5,6個異步請求也沒什麼,可是在無線端,在客戶手機上創建一個HTTP請求開銷很大,有了這個優化,性能一下提高好幾倍。

Node什麼都能作,爲何還要JAVA/PHP?

咱們的初衷是作先後端分離,若是考慮這個問題就有點違背咱們的初衷了。即便用Node替代Java/PHP,咱們也沒辦法保證不出現今天遇到的種種問題,好比職責不清。咱們的目的是分層開發,專業的人,專一作專業的事。基於JAVA/PHP的基礎架構已經很是強大並且穩定,並且更適合作如今架構的事情。

前端的任務更重要了

常見的先後端分離的開發模式中,後端爲前端提供了路由結構和頁面的數據綁定,前端只須要切頁面和少許的邏輯。

在node中間層中,前端不只僅要切頁面和作頁面邏輯,還要作url design、頁面數據綁定、聯調與溝通,還要考慮SEO的問題,僞靜態頁面、title/keyword設置、網站地圖,甚至包括錯誤日誌等等。

雖然前端的工做量增長了很多,可是基於模塊化的開發,讓整體的效率提高了。
對於後端程序員,接口整合的工做交給了前端服務器進行處理,同時和前端耦合度大大下降,工做量和工做效率都減小了。

另外,因爲先後端分離,測試均可以分開來了,專門測試接口的和專門測試ui層。

總結

我以爲,之後基於NodeJs的全棧式開發的模式將會愈來愈流行,這也會引領前端步入工程化時代。可是要把Node全棧開發變成一個穩定的、方便的開發工具,還有不少路要走。此次公司的交易平臺項目就是一個很好的實踐,接下來,請繼續關注我對這個項目的總結,但願能給各位帶來靈感。

歡迎繼續關注本博的更新
Node中間層實踐(一)——基於NodeJS的全棧式開發
Node中間層實踐(二)——搭建項目框架
Node中間層實踐(三)——webpack配置
Node中間層實踐(四)——模板引擎pug
Node中間層實踐(五)——express-中間層的邏輯處理

相關文章
相關標籤/搜索