鍍金池/ 問答/HTML/ 關(guān)于前端引入node.js作為與后端通信的中間層一點小問題

關(guān)于前端引入node.js作為與后端通信的中間層一點小問題

圖片描述

二話不說先上圖,問題如下列表,望各位大大解解惑。
為了防止防止跨頻道回答,首先先說說自己對于前后分離的理解,后端管理model層,業(yè)務(wù)處理/數(shù)據(jù)等,前端負責view or Controller層(例如表單提交之后的跳轉(zhuǎn)等),舉個例子來說,假設(shè)目前有一個SPA應(yīng)用,在開發(fā)過程中后端僅提供API(對于Controller層和view層不管理),所有前端的頁面展示,跳轉(zhuǎn)等都是有前端自己控制,而前后端通信的唯一方式就是API。

問題如下

  1. 假設(shè)目前有一個列表直接用node請求,渲染模版最終展現(xiàn)頁面,和直接在頁面發(fā)起ajax請求,然后用js渲染頁面,會不會由什么區(qū)別(不考慮SEO的情況)
  2. 假設(shè)我現(xiàn)在有一個表單的提交,一般情況都是調(diào)接口拿到返回值再作出對應(yīng)的操作。在node作為中間層的情況下是調(diào)用node的服務(wù),然后node調(diào)用后端的服務(wù)(例如:API),這樣和前端直接調(diào)用api有什么區(qū)別?
  3. node作為中間層的前端架構(gòu)體系的優(yōu)勢以及短板分別有哪些?(類似于seo,前后分離專業(yè)的人干專業(yè)的事可以不用說,感覺網(wǎng)上的東西太散了,每個全局的視野)
回答
編輯回答
瘋子范
  1. 最后的結(jié)果沒區(qū)別。但是如果你對時間要求很高的話,我建議是服務(wù)端渲染,比如頁面緩存。而如果要求不是太高的話,我更傾向于前端渲染(開發(fā)方便很多),SEO可以通過ua返回一個完整頁面,不是太大的問題。
  2. 這樣前端就不用關(guān)心后端服務(wù),不用發(fā)送一堆請求然后組合出需要的視圖數(shù)據(jù),這部分都交到node上做,后端變更也只需要同時更新node服務(wù)。
  3. 短板暫時沒想到。等大佬指出。

補充

看到樓下的回答想起了耗子老師的一篇文章分布式系統(tǒng)架構(gòu)的冰與火
問題3的邏輯大致相同

圖片描述

2017年7月23日 00:08
編輯回答
我不懂

1。有條件使用node當然要加上node啦,可以不暴露前端設(shè)計結(jié)構(gòu),更符合架構(gòu)思想啦。
2。繼續(xù)推廣微服務(wù)架構(gòu),使用node做中間層,便于模塊化處理啦。
3。短板很明顯,增加基友們的開發(fā)復雜度和鬧心程度,業(yè)務(wù)的維護就增多。但是很架構(gòu),很有設(shè)計模式的思想啦。
4。港聲多謝烏蠅哥啦

2018年7月31日 04:14
編輯回答
糖豆豆

Q1:如果只是一個列表的話,沒什么大的差別吧。用node.js渲染返回html可以有良好的首屏體驗。但是如果列表分頁的話你又要一次完整的頁面加載。這個時候ajax就可以避免這個問題。首屏體驗可以由前端技術(shù)優(yōu)化。服務(wù)端渲染最終吃的是服務(wù)端的配置和性能。大訪問量下如果把渲染交給前端,你的服務(wù)器減輕很多壓力和配置上的節(jié)省。
Q2:區(qū)別
增加了一層node作為中間層很明顯就多了一層網(wǎng)絡(luò)請求。nodejs啟動了一個web服務(wù)器。你的Ajax請求本來是由:
前端=>nginx=>應(yīng)用服務(wù)器(Java/Server)
現(xiàn)在多了一層就變成了:
前端=>nginx=>nodejs中間層=>應(yīng)用服務(wù)器(Java/Server)
負面的情況下:如果傻傻地把node.js中間層部署在了和應(yīng)用服務(wù)器完全不一樣的環(huán)境。這一層網(wǎng)絡(luò)請求會影響請求效率。如果部署在了同一個環(huán)境則影響變小。但依然有影響。
正面情況下:nodejs中間層提供了你整合接口的能力。面對多變的前端業(yè)務(wù)變化。你可以靈活整合自己所需的接口。
Q3:整體如果能實施的話感覺還是利大于弊的。多了個中間層對前端人員要求的增加(人員成本),維護成本的增加(單元測試,測試成本)。甚至某些時候排錯的影響。本來的業(yè)務(wù)邏輯出錯可能在前端,不然就是后端(數(shù)據(jù)庫,運維層面的也包括)。現(xiàn)在還可能隱蔽的出現(xiàn)在中間層。好處我感覺就是靈活度和可維護性。接口對前端來說似乎更友好更穩(wěn)定了。

以上都是個人見解,有錯誤還請幫忙指出,因為還沒實踐過node.js中間層。

2017年7月5日 03:03