WEB前后端分離歷史

可以免費(fèi)學(xué)習(xí)藍(lán)調(diào)的網(wǎng)站

BS與CS架構(gòu)

在很久以前宵荒,有web網(wǎng)頁的時候,有服務(wù)器和瀏覽器 這兩個東西是構(gòu)建我們?yōu)g覽互聯(lián)網(wǎng)的輔助工具豁鲤,瀏覽器是我們?yōu)g覽互聯(lián)網(wǎng)的主要入口兜材,而這只是我們常用的一種方式,除了瀏覽器我們?yōu)g覽互聯(lián)網(wǎng)還可以通過客戶端纫雁,也就是我們常用的exe程序煌往,而服務(wù)器就是我們?yōu)g覽的內(nèi)容,這些內(nèi)容不是憑空產(chǎn)生的是存在大型服務(wù)器里的轧邪,服務(wù)器和我們普通的電腦硬件(PC)內(nèi)容上沒什么刽脖,主要是操作系統(tǒng)會用一些開源的linux系統(tǒng)会钝,它的穩(wěn)定性會更好借嗽,更新也會更及時。綜合上述我們的這也就分成了瀏覽利用互聯(lián)網(wǎng)的兩個重要流派:

  • BS架構(gòu) -> Browser - Server -> 瀏覽器 - 服務(wù)器 e.g:大型網(wǎng)站 新聞門戶


    2.png

優(yōu)缺點(diǎn):

  1. B/S客戶端的計(jì)算機(jī)電腦配置要求較低
  2. B/S最大的優(yōu)點(diǎn)就是不用安裝任何專門的軟件镀琉,只要有一個瀏覽器就可以
  3. B/S客戶端不必安裝及維護(hù)
  • CS架構(gòu) -> Client - Server ->客戶端 - 服務(wù)器 e.g:QQ 網(wǎng)絡(luò)游戲 騰訊視頻(所有可以聯(lián)網(wǎng)的exe程序)


    1.png

優(yōu)缺點(diǎn):

  1. C/S客戶端的計(jì)算機(jī)電腦配置要求較高
  2. C/S每一個客戶端都必須安裝和配置專用的軟件
  3. C/S每一個客戶端都要進(jìn)行升級和維護(hù)
  4. C/S一般面向相對固定的用戶群硕糊,它可以對權(quán)限進(jìn)行多層次校驗(yàn)院水,提供了更安全的存取模式,對信息安全的控制能力很強(qiáng)简十。一般高度機(jī)密的信息系統(tǒng)應(yīng)采用C/S結(jié)構(gòu)
PS: 隨著互聯(lián)網(wǎng)的不斷發(fā)展 移動端逐漸興起檬某,App-IOS,Android是手機(jī)端的重要瀏覽方式,
在發(fā)展中前端框架google開發(fā)的augular的出現(xiàn)讓web開發(fā)出現(xiàn)了重大變革螟蝙,他讓web瀏覽器
通過http鏈接第一次訪問直接下載服務(wù)器程序(他就相當(dāng)于本地存儲也就是一個app)瀏覽
方式還是通過url鏈接去訪問網(wǎng)站但現(xiàn)在是混合開發(fā)恢恼,瀏覽器訪問也相當(dāng)于app訪問,他們倆
畫了一個等號胰默〕“撸【而這個時候前后端分離有了變化】。

前后端分離歷史與歷程

前后端未分離時代:

前后端耦合時代牵署,這時候有個技術(shù)模型叫做mvc漏隐,我們開發(fā)web網(wǎng)站都尊崇這個模式開發(fā)直到現(xiàn)在都是。
MVC: M->MODEL;V->VIEW;C->CONTROLLER
而開發(fā)的時候奴迅,很久以前的技術(shù)view層用jsp技術(shù)青责,control用servlet,mode用javabean


6.jpg

7.png

大致就是,所有的客戶端請求都被發(fā)送給作為控制器的Servlet爽柒,它接收請求,并根據(jù)請求信息將它們分發(fā)給適當(dāng)?shù)腏SP來響應(yīng)者填。同時浩村,Servlet還根據(jù)JSP的需求生成JavaBeans的實(shí)例并輸出給JSP環(huán)境。JSP可以通過直接調(diào)用方法或使用UseBean的自定義標(biāo)簽得到JavaBeans中的數(shù)據(jù)占哟。需要說明的是心墅,這個View還可以采用Velocity、Freemarker等模板引擎榨乎。使用了這些模板引擎怎燥,可以使得開發(fā)過程中的人員分工更加明確,還能提高開發(fā)效率蜜暑。
開發(fā)形式:


5.png

這種方式已經(jīng)逐漸淘汰铐姚。主要原因有兩點(diǎn):
1.前端在開發(fā)過程中嚴(yán)重依賴后端,在后端沒有完成的情況下肛捍,前端根本無法干活隐绵。
2.由于趨勢問題,會JSP拙毫、懂Velocity和曉Freemarker等模板引擎的前端越來越少依许。

前后端半分離時代:

走過了前后端未分離的時代,來到了前后端半分離的時代缀蹄。在這個時代峭跳,前端負(fù)責(zé)開發(fā)頁面,通過接口(AJAX)獲取數(shù)據(jù)缺前,采用DOM操作對頁面進(jìn)行數(shù)據(jù)綁定蛀醉,最終是由前端把頁面渲染出來,這也就是AJAX與SPA應(yīng)用(單頁應(yīng)用)結(jié)合的方式.


8.png

1.瀏覽器請求诡延,CDN返回HTML頁面滞欠。
2.HTML中的JS代碼以AJAX的方式請求后臺的RESTFUL API接口。
3.接口響應(yīng)并返回JSON數(shù)據(jù)肆良,頁面解析JSON數(shù)據(jù)后通過DOM操作渲染頁面筛璧。
這里后端提供的都是以JSON為數(shù)據(jù)格式的API接口供Native端使用,同樣提供給WEB的也是JSON數(shù)據(jù)格式的API接口惹恃,那么就意味著WEB的工作流程是:
1.打開WEB瀏覽器夭谤,加載基本資源,如CSS巫糙、JS和圖片等朗儒。
2.使用JS發(fā)起一個AJAX請求到服務(wù)端請求數(shù)據(jù),同時展示LOADING(加載中)。
3.得到JSON格式的數(shù)據(jù)后再根據(jù)邏輯選擇模板渲染出DOM字符串醉锄。
4.將DOM字符串插入頁面中WEB VIEW渲染出DOM結(jié)構(gòu)乏悄。
這些步驟都由用戶所使用的設(shè)備中逐步執(zhí)行,也就是說用戶的設(shè)備性能與APP的運(yùn)行速度緊密聯(lián)系恳不,換句話說檩小,如果用戶的設(shè)備很低端,那么APP打開頁面的速度就會很慢烟勋,極度影響用戶體驗(yàn)规求。
為什么說是半分離的呢,因?yàn)椴皇撬许撁娑际菃雾撁鎽?yīng)用卵惦。在多頁面應(yīng)用的情況下阻肿,前端因?yàn)闆]有掌握Controller層,前端需要和后端討論頁面是要同步輸出還是異步JSON渲染沮尿。而且即使在這個時期丛塌,通常也是一個工程師搞定前后端所有的工作。因此在這個階段只能算半分離蛹找。
這個時代比起上一個時代還是有進(jìn)步的姨伤,首先前端不會嵌入任何后臺代碼,前端專注于HTML庸疾、CSS乍楚、JS的開發(fā),不依賴于后端届慈。自己還能夠模擬JSON數(shù)據(jù)來渲染頁面徒溪,發(fā)現(xiàn)BUG也能迅速定位出是誰的問題。
然而在這種架構(gòu)下還是存在明顯的弊端的金顿,最明顯的有如下幾點(diǎn):
1.JS存在大量冗余臊泌,在業(yè)務(wù)復(fù)雜的情況下,頁面的渲染部分的代碼非常復(fù)雜揍拆。
2.在JSON返回的數(shù)據(jù)量比較大的情況下渠概,渲染非常緩慢,會出現(xiàn)頁面卡頓的情況嫂拴。
3.SEO(Serach Engine Optimization播揪,搜索引擎優(yōu)化)非常不方便。由于國內(nèi)的搜索引擎的爬蟲無法爬下JS異步渲染的數(shù)據(jù)筒狠,導(dǎo)致這樣的頁面SEO會存在一定的問題猪狈。
4.資源消耗嚴(yán)重,在業(yè)務(wù)復(fù)雜的情況下辩恼,一個頁面可能要發(fā)起多次HTTP請求才能將頁面渲染完畢雇庙∥叫危可能有人不服,覺得PC端建立多次HTTP請求也沒啥疆前,但是移動端建立一次HTTP請求的消耗十分巨大寒跳。
真是因?yàn)槿缟系娜秉c(diǎn),我們在亟需真正的前后端分離架構(gòu)

前后端分離時代:

  • 這個時候是淘寶進(jìn)行的首次項(xiàng)目開發(fā)竹椒,他開創(chuàng)性的運(yùn)用了node.js做中間層冯袍。前端負(fù)責(zé)View和Controller層,后端只負(fù)責(zé)Model層和Service層碾牌。Controller層要怎么實(shí)現(xiàn)呢?NodeJS適合運(yùn)用在高并發(fā)儡循、I/O密集舶吗、少量業(yè)務(wù)邏輯的場景。他利用了谷歌瀏覽器v8引擎择膝,速度非常的快誓琼,最重要的一點(diǎn)是,前端不用再學(xué)一門其它語言了肴捉,美滋滋腹侣。可以把NodeJS當(dāng)成跟前端交互的API齿穗。


    3.png
  • NodeJS路由的實(shí)現(xiàn)邏輯是把前端靜態(tài)頁面代碼當(dāng)成字符串發(fā)送到客戶端(例如瀏覽器)傲隶,簡單理解可以理解為路由是提供給客戶端的一組API接口,只不過返回的數(shù)據(jù)是頁面代碼的字符串而已窃页。
  • 用NodeJS來作為橋梁架構(gòu)服務(wù)端API輸出的JSON能帶來優(yōu)異性能跺株。后端處于性能和別的原因,提供的接口所返回的數(shù)據(jù)格式也許不太適合前端直接使用脖卖,前端所需的排序功能乒省、篩選功能以及到了視圖層的頁面展現(xiàn),也許都需要對接口所提供的數(shù)據(jù)進(jìn)行二次處理畦木。這些處理雖然是可以放在前端來執(zhí)行袖扛,但如果數(shù)據(jù)量一大,便會浪費(fèi)瀏覽器性能十籍,更會降低頁面渲染速度蛆封,影響用戶體驗(yàn)。因而如今增加NodeJS中間層是一種良好的解決方案妓雾。
  • 增加了NodeJS中間層之后娶吞,瀏覽器(Webview)便不再直接請求服務(wù)端的API,而是瀏覽器先去請求服務(wù)端的NodeJS械姻,由NodeJS對服務(wù)端的API發(fā)起HTTP請求妒蛇,NodeJS收到服務(wù)端的API響應(yīng)返回的JSON后就去渲染HTML頁面机断,然后NodeJS直接將HTML頁面flush到瀏覽器。這樣绣夺,瀏覽器得到的就是普通的HTML頁面吏奸,不再用發(fā)AJAX去請求服務(wù)器之后再在瀏覽器進(jìn)行頁面渲染了。
    增加NodeJS中間層主要有以下優(yōu)點(diǎn):
  1. 適配性提升陶耍。我們在開發(fā)過程中奋蔚,經(jīng)常會給PC端、Mobile烈钞、App端各自研發(fā)一套前端泊碑。其實(shí)對于這三端來說,大部分業(yè)務(wù)邏輯是一樣的毯欣,唯一的區(qū)別就是交互展現(xiàn)邏輯的不同馒过。如果Controller層在后端手里,后端為了這些不同端頁面展現(xiàn)邏輯酗钞,自己維護(hù)這些Controller腹忽,模板無法重用,徒增與前端溝通成本砚作。如果增加了NodeJS層窘奏,每種前端的界面展示邏輯由NodeJS層自己維護(hù)。產(chǎn)品經(jīng)理在中途如果想要改動界面葫录,可以由前端自己維護(hù)着裹,無需后端操心。前后端各司其職米同,后端專注于自己的業(yè)務(wù)邏輯開發(fā)求冷,前端專注于產(chǎn)品效果開發(fā)。


    9.png

    2.響應(yīng)速度提升窍霞。有的時候會遇到后端返回給前端得數(shù)據(jù)太簡單了匠题,需要前端對這些數(shù)據(jù)進(jìn)行邏輯處理。那么在數(shù)據(jù)量比較小得時候但金,對其做運(yùn)算分組等操作韭山,并無影響。但是當(dāng)數(shù)據(jù)量大的時候冷溃,會有明顯的卡頓效果钱磅。這時候,NodeJS中間層其實(shí)可以將很多這樣的代碼放入NodeJS層處理似枕,也可以替后端分擔(dān)一些簡單的邏輯盖淡、又可以用模板引擎自己掌握前臺的輸出。這樣做凿歼,靈活度褪迟、響應(yīng)度都有較大的提升冗恨。
    3.性能得到提升。大家應(yīng)該都知道單一職責(zé)原則味赃,從該角度來看掀抹,我們請求一個頁面,可能要響應(yīng)很多個后端接口心俗,請求變多了傲武,自然速度就變慢了,這種現(xiàn)象在Mobile端更加嚴(yán)重城榛。采用NodeJS作為中間層揪利,將頁面所需要的多個后端數(shù)據(jù)直接在內(nèi)網(wǎng)階段就拼裝好,再統(tǒng)一返回給前端狠持,會得到更好的性能土童。
    4.異步與模板統(tǒng)一。淘寶首頁就是由幾十個HTML片段(每個片段一個文件)拼裝成的工坊。之前PHP同步加載這幾十個片段,一定是串行的敢订,換成NodeJS之后就可以實(shí)現(xiàn)異步加載王污,讀文件可以并行,一旦這些片段中也包含業(yè)務(wù)邏輯楚午,異步的優(yōu)勢就很明顯了昭齐,真正做到哪個文件先渲染完就先輸出顯示。前端機(jī)的文件系統(tǒng)越復(fù)雜矾柜,頁面的組成片段越多阱驾,這種異步的提速效果就越明顯。前后端模板統(tǒng)一在無線領(lǐng)域很有用怪蔑,PC頁面和WIFI場景下的頁面適合前端渲染(后端數(shù)據(jù)通過AJAX返回到前端)里覆,2G/3G弱網(wǎng)絡(luò)環(huán)境則適合后端渲染(數(shù)據(jù)隨著頁面一起返回給前端),所以同樣的模板缆瓣,在不同的條件下走不同的渲染渠道喧枷,模板只需要一次開發(fā)。

前后端分離的缺點(diǎn):

1.人員問題弓坞。宣傳這種架構(gòu)的公司一般都是很高級別的公司隧甚,一般的中小型公司沒有這樣的前端資源來支撐這樣的架構(gòu)。如果強(qiáng)推前后端分離的架構(gòu)可能會導(dǎo)致很多問題 渡冻,比如后端被逼著去學(xué)VueJS戚扳,NodeJS這些,白白增加后端的負(fù)擔(dān)族吻,甚至?xí)斐珊蠖碎_發(fā)紛紛離職的情況帽借。
2.產(chǎn)品迭代周期的問題珠增。中小型的軟件公司一般需要一個比較快的軟件迭代周期。采用前后端分離架構(gòu)的話宜雀,增加了一個接口指定流程和前后端聯(lián)調(diào)流程切平。從本質(zhì)上來說放慢了迭代的周期。
3.前端需要學(xué)習(xí)業(yè)務(wù)知識辐董。本來前端只需要掌管視覺交互的部分°财罚現(xiàn)在因?yàn)镃ontroller層也歸前端管了,前端必須對公司的業(yè)務(wù)流程有深入的了解简烘,才能準(zhǔn)確地寫出顯示邏輯苔严。不過這樣會讓后端覺得前端奪權(quán),前端在混KPI孤澎。前端雖然必須要去學(xué)無聊的業(yè)務(wù)届氢,但是有得必有失,前端也因此能夠站穩(wěn)腳跟覆旭。也許正是因?yàn)榍昂蠖朔蛛x架構(gòu)的出現(xiàn)退子,前端可以朝著架構(gòu)師進(jìn)軍.

這是我的個人網(wǎng)址,用于分享和技術(shù)記錄還可以學(xué)習(xí)藍(lán)調(diào)口琴希望大家多點(diǎn)擊啊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末型将,一起剝皮案震驚了整個濱河市寂祥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌七兜,老刑警劉巖丸凭,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腕铸,居然都是意外死亡惜犀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門狠裹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虽界,“玉大人,你說我怎么就攤上這事涛菠∨遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵碗暗,是天一觀的道長颈将。 經(jīng)常有香客問我,道長言疗,這世上最難降的妖魔是什么晴圾? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮噪奄,結(jié)果婚禮上死姚,老公的妹妹穿的比我還像新娘人乓。我一直安慰自己,他們只是感情好都毒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布色罚。 她就那樣靜靜地躺著,像睡著了一般账劲。 火紅的嫁衣襯著肌膚如雪戳护。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天瀑焦,我揣著相機(jī)與錄音腌且,去河邊找鬼。 笑死榛瓮,一個胖子當(dāng)著我的面吹牛铺董,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禀晓,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼精续,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粹懒?” 一聲冷哼從身側(cè)響起重付,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崎淳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕把,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拣凹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恨豁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚣镜。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖橘蜜,靈堂內(nèi)的尸體忽然破棺而出菊匿,到底是詐尸還是另有隱情,我是刑警寧澤计福,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布跌捆,位于F島的核電站,受9級特大地震影響象颖,放射性物質(zhì)發(fā)生泄漏佩厚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一说订、第九天 我趴在偏房一處隱蔽的房頂上張望抄瓦。 院中可真熱鬧潮瓶,春花似錦、人聲如沸钙姊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煞额。三九已至思恐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間立镶,已是汗流浹背壁袄。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媚媒,地道東北人嗜逻。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像缭召,于是被迫代替她去往敵國和親栈顷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 區(qū)塊鏈?zhǔn)?8年最火的話題嵌巷,區(qū)塊鏈中最火的就是公鏈萄凤、基礎(chǔ)設(shè)施,也就是——Dapp開發(fā)平臺搪哪,今天本文要說的就是未來區(qū)塊...
    曉杰牙醫(yī)閱讀 1,669評論 0 1
  • 選擇題部分 1.(),只有在發(fā)生短路事故時或者在負(fù)荷電流較大時,變流器中才會有足夠的二次電流作為繼電保護(hù)跳閘之用靡努。...
    skystarwuwei閱讀 12,907評論 0 7
  • 山園小梅·其一 宋 · 林逋 眾芳搖落獨(dú)暄妍,占盡風(fēng)情向小園晓折。疏影橫斜水清淺惑朦,暗香浮動月黃昏。霜禽欲下先偷眼漓概,粉蝶...
    百硯園閱讀 349評論 0 3
  • 今日取得一本好書漾月。《偷影子的人》 故事梗概是男主自小身體孱弱胃珍,被班上惡霸欺負(fù)梁肿,父親也因出軌離開了他和母親,而且隨著...
    周周是個妞閱讀 343評論 2 2
  • 誰說歷史會被遺忘 此刻的你已成為標(biāo)榜 誰說人生太多滄桑 你用行動詮釋著輝煌 日復(fù)一日的傳講 換回?zé)o數(shù)生命的綻放 年...
    窗前的小豆豆閱讀 181評論 0 0