动静分离和前后端分离
一、前端和后端的概念(怎么區(qū)分是前端還是后端)
什么是前端? 這又可以分解成幾個(gè)小問題。
1.JS是前端么? 2.只要用JS寫的,都是前端么? 3.只要是前端工程師寫的,都是前端么?4.大前端就是指的用JS語言寫的前端,哪怕它是運(yùn)行在服務(wù)器那一端么? 5.App算前端么? 6.Html+CSS算前端么? 7.小程序算前端么? 8.ReactNative算前端么?
通常情況下,我們說的前端,都是指瀏覽器這一端,瀏覽器這一端,又在通常情況下,都是用JS來實(shí)現(xiàn)的,所以又會(huì)引申為,用JS寫的大部分程序都是前端,包括App,小程序,H5等。而NodeJS出現(xiàn)之后,用NodeJS寫的后端部分,也會(huì)被人歸類為前端,為了區(qū)分之前的前端,就給他們起了一個(gè)名字,叫做“大前端”。
但,這種以語言為分界點(diǎn)去區(qū)分前后端,真的合理么?
在過去,我們是不分前后端的,無論是Java還是JS,全都是一個(gè)人來寫。
到底是什么原因讓我們開始區(qū)分前后端了?
第一個(gè),是可以并行開發(fā)。前后端的進(jìn)度互不影響,在過去,前后端不分離的情況下,前端的工作量相對(duì)較少,一個(gè)前端可以對(duì)四個(gè)后端。可以理解為,前端花了一周時(shí)間寫好了靜態(tài)頁面,只需要調(diào)幾個(gè)Ajax接口,不需要路由,也不需要渲染,所以他可以把時(shí)間繼續(xù)在下一個(gè)項(xiàng)目里。
第二個(gè),是成本問題。在過去,后端的成本還是比前端要高一些。同樣的工作,如果能拆給兩個(gè)人做,一個(gè)成本高一點(diǎn),一個(gè)成本低一點(diǎn),能接受。
第三個(gè),CSS太難了。JS還好,和后端語言在對(duì)技能的訓(xùn)練上相差不大,可是CSS是什么鬼?記住那么多的屬性,和Hash算法有關(guān)系嗎?
所以才分成了前后端,而Html+CSS+JS,都是在瀏覽器端執(zhí)行,統(tǒng)一稱之為前端。而Java,C,Python,PHP這些可以運(yùn)行在服務(wù)器端的,統(tǒng)一稱之為后端。
所以前后端的定義,不應(yīng)該是以語言來定義,而是應(yīng)該以它的運(yùn)行環(huán)境,如果是在服務(wù)器端,就應(yīng)該被稱之為后端,代表著你看不見,摸不著。
而如果運(yùn)行在用戶端,就應(yīng)該被稱之為前端,代表你是可以看得到的。
二、動(dòng)靜分離
靜態(tài)頁面:是指互聯(lián)網(wǎng)架構(gòu)中,幾乎不變的頁面(或者變化頻率很低)。
動(dòng)態(tài)頁面:是指互聯(lián)網(wǎng)架構(gòu)中,不同用戶不同場景訪問,都不一樣的頁面。
動(dòng)態(tài)資源 jps servlet spring mvc 與靜態(tài)資源 js html img css 不會(huì)部署到同一個(gè)服務(wù)器。接口與視圖分開部署,前端項(xiàng)目與后端項(xiàng)目都是獨(dú)立部署的。也就是說前臺(tái)通過后端提供的接口來拿到數(shù)據(jù),后臺(tái)只為前端提供接口。動(dòng)靜分離就是將動(dòng)態(tài)請求和靜態(tài)請求區(qū)分訪問。將靜態(tài)資源部署到一個(gè)服務(wù)器,動(dòng)態(tài)資源部署到一個(gè)服務(wù)器,它們是分開部署的。
三、為什么要?jiǎng)屿o分離
靜態(tài)頁面訪問路徑短,訪問速度快,幾毫秒。動(dòng)態(tài)頁面訪問路徑長,訪問速度相對(duì)較慢(數(shù)據(jù)庫的訪問,網(wǎng)絡(luò)傳輸,業(yè)務(wù)邏輯計(jì)算),幾十毫秒甚至幾百毫秒,對(duì)架構(gòu)擴(kuò)展性的要求更高。靜態(tài)頁面與動(dòng)態(tài)頁面以不同域名區(qū)分。
這樣可以提升系統(tǒng)的訪問速度,提升資源利用率。
四、前后分離
核心思想是前端html頁面通過ajax調(diào)用后端的restuful api接口并使用json數(shù)據(jù)進(jìn)行交互。
前后端分離并非僅僅只是一種開發(fā)模式,而是一種架構(gòu)模式(前后端分離架構(gòu))。千萬不要以為只有在擼代碼的時(shí)候把前端和后端分開就是前后端分離了,需要區(qū)分前后端項(xiàng)目。前端項(xiàng)目與后端項(xiàng)目是兩個(gè)項(xiàng)目,放在兩個(gè)不同的服務(wù)器,需要獨(dú)立部署,兩個(gè)不同的工程,兩個(gè)不同的代碼庫,不同的開發(fā)人員。前后端工程師需要約定交互接口,實(shí)現(xiàn)并行開發(fā),開發(fā)結(jié)束后需要進(jìn)行獨(dú)立部署,前端通過ajax來調(diào)用http請求調(diào)用后端的restful api。前端只需要關(guān)注頁面的樣式與動(dòng)態(tài)數(shù)據(jù)的解析&渲染,而后端專注于具體業(yè)務(wù)邏輯。
五、前后端交互
前后端數(shù)據(jù)交互均是json格式,前端傳到后臺(tái)的都是json格式的數(shù)據(jù),即前端提交表單時(shí)會(huì)將表單數(shù)據(jù)序列化為json數(shù)據(jù),那么在后臺(tái)涉及到對(duì)象的都必須用@RequestBody接收。
參考博文:
(1) https://www.cnblogs.com/xixinhua/p/10265426.html (有助于理解什么是前后端)
(2) https://blog.csdn.net/sod5211314/article/details/80601724 (有助于理解前后端分離)
文章轉(zhuǎn)自
總結(jié)
以上是生活随笔為你收集整理的动静分离和前后端分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021游戏市场风向标报告
- 下一篇: 分享个竞品分析报告