關于前后端分離的資料收集

收集一些關于前后端分離的資料菱魔,并做出一些總結,如有不正確之處請指出蝇棉。

前言

什么樣的場景下讨阻,應該使用前后端分離

? ? ? ? ?很簡單〈垡螅“不需要SEO的場景下钝吮,都應該使用前后端分離”。

? ? ? ? ? 所以在后臺管理中,沒有任何理由不使用前后端分離奇瘦,代指SPA棘催。

? ? ? ? ? 而在前臺頁面中,要認真考慮链患,不支持SEO的代價巧鸭,不止幾百萬。

? ? ? ? ? 前后需要用戶登錄的頁面麻捻,往往是不需要有SEO的纲仍,這里也可以拆解出來。

轉自:https://www.zhihu.com/question/267014376/answer/444793972

什么導致的前后端分離:

實際上是先有了單頁面應用贸毕,才會出現(xiàn)前后端分離郑叠。

單頁面應用可以讓用戶不需要下載 APP,就可以擁有相似的體現(xiàn)明棍。并且與早期的移動網頁相比乡革,擁有更好的體驗,當頁面加載完后摊腋,每打開一個新的鏈接時沸版,不再需要等網絡返回給我結果;我也能快速的回到上一個頁面兴蒸,像一個 APP 一樣的體現(xiàn)這樣的應用视粮。整個過程里,我們只是不斷地從后臺去獲取數(shù)據(jù)橙凳,不需要重復地請求頁面——因為這些頁面的模板已經存在本地了蕾殴,我們所缺少的只是實時的數(shù)據(jù)

什么是前后端分離:

前后端之間使用 JSON 來交流,兩個開發(fā)團隊之間使用 API 作為契約進行交互岛啸。

即后臺選用的技術棧不影響前臺钓觉。當后臺開發(fā)人員選擇 Java 的時候,我可以不用 JSP 來編寫前端頁面坚踩,繼續(xù)使用我的 React 又或者 Angular荡灾。而我使用 React 時,也不影響后臺使用某一個框架瞬铸。前后端分離和微服務一樣卧晓,漸漸地影響了新的大型系統(tǒng)的架構。微服務和前后端分離要解決是類似的問題赴捞,解耦——可以解耦復雜的業(yè)務邏輯,解耦架構郁稍∩庹可要是說相像吧,消息隊伍和前后端便相似一些,通過傳遞數(shù)據(jù)的形式來解耦組件恢着。

轉自:你真的懂前后端分離嗎桐愉?

前后端分離的助力:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 前端mv時代:

? ? ? ? ? ? ? ? ? ? ? 1.瀏覽器提供可能性:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 局部刷新: ajax

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 前端路由: hashchange/history

? ? ? ? ? ? ? ? ? ? ? ? 2.框架及工具支持:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?框架:vue/react

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 前端路由 vue-router/react-router

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?前端數(shù)據(jù)存儲: vuex/redux

? ? ? ? ? ? ? ? ? ? ? ? ?3.中間層:Node.js

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?環(huán)境:前端開發(fā)者不需要本地起后端環(huán)境

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?聯(lián)調:清晰的對接方式,JSON 實現(xiàn)前后端來說都是比較純粹的

? ? ? ? ? ? ? ? ? ? ? ? ? ? 效益:可漸進式掰派,前期可以將請求全部轉發(fā)后端服務器从诲,而后可以逐步將 Node.js 層作為用戶的直接數(shù)據(jù)交換層

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?職責分明,后端服務化靡羡,Node.js 層處理接口用戶相關的頁面響應 及 數(shù)據(jù)交換

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可組合性系洛,后端服務化,Node.js 負責組合拼裝略步,實現(xiàn)接口可復用率

? ? ? ? ? ? ? ? ? ? ? ? 4.前后端分工調整為:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 前端:接收數(shù)據(jù)/返回數(shù)據(jù)描扯,處理渲染邏輯

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?后端:提供數(shù)據(jù),處理業(yè)務邏輯

轉自:實踐中的前后端分離

前后端分離的好處:

關注點分離? ? ? ? ? ? ? ? ?職責分離? ? ? ? ? ? ? ? ? ?對的人做對的事? ? ? ? ? ? ? ? ? ? ? 更好的共建模式? ? ? ? ? ? ? ? ?快速的反應變化

淘寶前后端分離的實戰(zhàn)歷史:

情景:老子一個人全包了啊啊啊..(獨自搞定哦趟薄,牛逼)

Roles: PM, DBA, RD, FED, Designer, ...

Skills: Linux, MySQL, JAVA, JavaScript, HTML, CSS, ...

Tools: phpmyadmin, photoshop, powerpoint, ...

結果:產品上線了→代碼維護時候就難受呀绽诚。。杭煎。

于是乎重構恩够!為了更好的未來

下面來,WEB SERVER的架構改造:

后端MVC時代:




前端:那羡铲。蜂桶。我呢?

這時的PM:前端你去套頁面吧犀勒。(恩屎飘,完美的分工。贾费。钦购。)

到了互聯(lián)網時代:根本頂不住了呀


沒辦法呀,前后端一起合作吧褂萧。押桃。


好了,前端的代碼出來了:


項目搞定了导犹,可是前端的問題來了:

? ? ?①前端代碼越來越復雜

? ? ?②無法統(tǒng)一協(xié)作模式唱凯,代碼充滿了約定

? ? ?③JS跟CSS,依賴於後端產出的HTML

? ? ?④有的數(shù)據(jù)來自AJAX谎痢,有的數(shù)據(jù)印在DOM上

? ? ?⑤有的業(yè)務邏輯在前端磕昼,有的在Model層,更多的是在View層

好了节猿,現(xiàn)在揭露本質:

? ? ? ①前后端依舊高度耦合

? ? ? ②前端依賴服務端開發(fā)環(huán)境

? ? ? ③在服務端View層高度耦合

? ? ? ④溝通成本高

? ? ? ⑤職責不清晰

VIEW層誰來維護票从?

? ? ?①前端寫Demo漫雕,后端套頁面

? ? ? ? ? ? ? 后端需要寫HTML

? ? ? ? ? ? ? ?前端仍然確認后端寫的HTML

? ? ? ②前端寫View層,后端只管數(shù)據(jù)

? ? ? ? ? ? ? ?前端需要熟悉后端語言

? ? ? ? ? ? ? ? 前端需要了解后端架構

可是還有問題呢:

? ? ?① 無法良好的支持跨終端

? ? ? ②業(yè)務邏輯散落在應用中

? ? ? ③渲染邏輯強依賴后端頁面

? ? ? ④只能用responsive design硬來

好吧峰鄙,沒什么好的辦法浸间,只能繼續(xù)硬鋼咯。吟榴。魁蒜。。

? ??高度耦合的前后端分工

? ? ? ?①?溝通成本上升

? ? ? ?維護成本上升

? ? ? ?無法正確且快速的響應變化

? ? ? ?④代碼的腐爛只是遲早的問題

恩恩吩翻。兜看。

第一次前後端分離大戰(zhàn)爆發(fā)

? 客戶端mv時代出來了:


好了 ,分工吧仿野。铣减。。接口分離, 後端提供數(shù)據(jù), 前端自己搞

MODEL層 - JavScript Object

VIEW層 - JavScript Template

業(yè)界滿坑滿谷的優(yōu)秀方案

Backbone, EmberJS, KnockoutJS, AngularJS, React, etc.

好了脚作,前后端職責清晰了:

后端:提供數(shù)據(jù)? ??處理業(yè)務邏輯? ??Server-side MVC架構??

前端:接收數(shù)據(jù)葫哗,返回數(shù)據(jù)? ?處理渲染邏輯? ?Client-side MV* 架構??代碼跑在瀏覽器上

分離乾淨了,分工明確了球涛,但是:

各層職責重疊劣针,并且各玩各的

Client-side Model 是 Server-side Model?的加工

Client-side View 跟 Server-side是?不同層次的東西

Client-side的Controller 跟 Sever-side的Controller?各搞各的

Client-side的Route 但是 Server-side?可能沒有

性能問題

? ? ?渲染,取值都在客戶端進行亿扁,有性能的問題

? ? 需要等待資源到齊才能進行捺典,會有短暫白屏與閃動

? ? ?在移動設備低速網路的體驗奇差無比

重用問題

? ? ?模版無法重用,造成維護上的麻煩與不一致

? ? 邏輯無法重用从祝,前端的校驗后端仍須在做一次

? ? 路由無法重用襟己,前端的路由在后端未必存在

跨終端問題

? ? 業(yè)務太靠前,導致不同端重復實現(xiàn)

? ? 邏輯太靠前牍陌,造成維護上的不易

SEO問題

? ? ?渲染都在客戶端擎浴,模版無法重用,SEO實現(xiàn)?麻煩

好了毒涧,再來贮预,

第二次前后端分離大戰(zhàn)爆發(fā)。契讲。仿吞。

探討:

重新定義前后端

傳統(tǒng)認知的前后端


是依照?工作職責來劃分的前后端

還是依照?硬體環(huán)境劃分的前后端?

因為有了NODEJS

? ? 我們有機會從工作職責上

? ? ?重新定義前后端的分層

重新定義的前后端


在服務器(JAVA) 與 瀏覽器(JS)的中間

架了一個中間層(NODEJS)

到底什么是node.js呢捡偏?唤冈??银伟?

? ? ?前端熟悉的語言你虹,學習成本低

? ? 都是JS凉当,可以前后端復用

? ? 體質適合:事件驅動非阻塞I/O

? ? 適合IO密集型業(yè)務

? ? 執(zhí)行速度也不差


好了好了售葡,開始職責劃分:


實例展示:

淘寶首頁優(yōu)化

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?需求

? ? ? ? ? ? ? ? ? ? 靜態(tài)資料展示,方便運營管理

? ? ? ? ? ? ? ? ? ? ?更好的承載密集且龐大的流量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?解決方案

? ? ? ? ? ? ? ? ? ? 頁面緩存與定時刷新忠藤,返回緩存資料

? ? ? ? ? ? ? ? ? ? NodeJS產出靜態(tài)頁面到CDN挟伙,定時刷新

淘寶詳情頁優(yōu)化

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?需求

? ? ? ? ? ? ? ? ? ? ? ? ?單日四億PV,頁面數(shù)據(jù)來自各個不同接口

? ? ? ? ? ? ? ? ? ? ? ? ?為了不影響體驗模孩,先產生頁面框架后

? ? ? ? ? ? ? ? ? ? ? ? ?在發(fā)起多個異步請求取數(shù)據(jù)更新頁面

? ? ? ? ? ? ? ? ? ? ? ? ? 這些多出來的請求帶來的影響不小尖阔,尤其在無線端

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?解決方案

? ? ? ? ? ? ? ? ? ? ? ? ? ?在NodeJS端使用?Bigpiper?技術

? ? ? ? ? ? ? ? ? ? ? ? ? 合并請求,降低負擔

? ? ? ? ? ? ? ? ? ? ? ? ? ? 分批輸出榨咐,不影響體驗

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 接口性能優(yōu)化

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?拆分大接口為獨立小接口介却,并發(fā)請求

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?串行 => 并行叔营,大幅縮短請求時間

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 部屬優(yōu)化

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一臺NodeJS對多臺JAVA服務器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 合理的分配服務器帶來最大的產出

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 頁面渲染優(yōu)化

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?前后端共享模版? ??首屏服務器渲染

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?次屏瀏覽器渲染? ? ?局部刷新瀏覽器渲染

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?單頁面應用優(yōu)化

? ? ? ? ? ? ? ? ? ? ? 前后端共享路由與模版? ? ? ?前端換頁辩诞,瀏覽器端渲染

? ? ? ? ? ? ? ? ? ? ?直接輸入網址,服務器渲染? ? ?SEO問題迎刃而解

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 可靠性優(yōu)化

? ? ? ? ? ? ? ? ? ? ? ? ? ? 單元測試初斑,頁面測試数焊,回歸測試永淌,持續(xù)集成

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 更多的可能

轉自:淘寶前后端分離實戰(zhàn)

注:以上內容均為方便個人學習所做的總結筆記,詳情請看原鏈接佩耳,有好建議歡迎留言遂蛀,后續(xù)繼續(xù)補充。干厚。

覺得好的資料:

①:分布式之閑侃前后端分離的必要性

②:如何正確理解前后端分離?

③:前端發(fā)展史

④:前端發(fā)展歷史

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末李滴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛮瞄,更是在濱河造成了極大的恐慌所坯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裕坊,死亡現(xiàn)場離奇詭異包竹,居然都是意外死亡,警方通過查閱死者的電腦和手機籍凝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門周瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饵蒂,你說我怎么就攤上這事声诸。” “怎么了退盯?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵彼乌,是天一觀的道長泻肯。 經常有香客問我,道長慰照,這世上最難降的妖魔是什么灶挟? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮毒租,結果婚禮上稚铣,老公的妹妹穿的比我還像新娘。我一直安慰自己墅垮,他們只是感情好惕医,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著算色,像睡著了一般抬伺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灾梦,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天峡钓,我揣著相機與錄音,去河邊找鬼斥废。 笑死椒楣,一個胖子當著我的面吹牛,可吹牛的內容都是我干的牡肉。 我是一名探鬼主播捧灰,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼统锤!你這毒婦竟也來了毛俏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饲窿,失蹤者是張志新(化名)和其女友劉穎煌寇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逾雄,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡阀溶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸦泳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银锻。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖做鹰,靈堂內的尸體忽然破棺而出击纬,到底是詐尸還是另有隱情,我是刑警寧澤钾麸,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布更振,位于F島的核電站炕桨,受9級特大地震影響,放射性物質發(fā)生泄漏肯腕。R本人自食惡果不足惜献宫,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望实撒。 院中可真熱鬧遵蚜,春花似錦、人聲如沸奈惑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肴甸。三九已至,卻和暖如春囚巴,著一層夾襖步出監(jiān)牢的瞬間原在,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工彤叉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庶柿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓秽浇,卻偏偏與公主長得像浮庐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柬焕,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容