整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          「干貨」前后端分離怎么部署?

          「干貨」前后端分離怎么部署?

          少粉絲和客戶朋友對(duì)于前后端分離怎么部署這個(gè)問題有很大的探索欲望。我們都知道,現(xiàn)在前后分離已經(jīng)是發(fā)展趨勢(shì)和潮流了,不少企業(yè)和客戶都希望前后端分離,這樣就能術(shù)業(yè)有專攻,前后端工程師能分出精力來專注于做好自己的事情,從而提升效率。本文將分享給大家的是前后端分離如何部署的知識(shí),滿滿的都是干貨,希望您能有所收獲。

          一、前后端分離怎么部署?分享具體步驟

          (一)一起部署:

          1.先將前端打包成靜態(tài)文件:npm run build

          2.將dist目錄下所有的文件拷貝到后端的static中(resource下的static)

          3.在后端框架攔截器中將之前拷貝的所有文件都放行

          4.注意修改配置文件里面mysql、redis以及其他的url

          5.打包后端在項(xiàng)目父路徑(idea后面帶ROOT)的lifecycle中點(diǎn)擊package

          6.找到target中的jar并上傳到linux(建議放到一個(gè)項(xiàng)目專屬文件夾中)

          7.切換到項(xiàng)目文件夾執(zhí)行命令 :nohup java -jar +jar包名稱(有幾個(gè)執(zhí)行幾遍)

          8.訪問瀏覽器輸入Linux的地址+端口號(hào)+index.html

          (二)前后端分離部署(使用nginx)

          1.先將前端打包成靜態(tài)文件:npm run build

          2.將dist目錄拷貝到Linux的文件夾下

          3.找到Linux的配置文件

          4.將nginx配置文件的指向地址修改為jar包的地址(后端)

          5.訪問靜態(tài)資源(第一步拷貝的前端資源)下面修改為項(xiàng)目的文件夾到dist

          6.將后端代碼打包成jar放入項(xiàng)目目錄

          7.切換到項(xiàng)目文件夾執(zhí)行命令 :nohup java -jar +jar包名稱

          8.啟動(dòng)nginx: …/sbin/nginx

          9.訪問瀏覽器輸入Linux的地址+index.html

          二、看看IBPS微服務(wù)架構(gòu)前后端分離框架特點(diǎn)

          正是由于前后端分離的需求越來越被重視,因此IBPS低代碼開發(fā)平臺(tái)服務(wù)商順勢(shì)而為,探索出另一條全新的前后端分離模式。那么,該平臺(tái)前后端分離框架的特點(diǎn)究竟是什么?一起來探尋。

          (一)前端解決方案特點(diǎn)

          采用Webpack的模塊打包機(jī)制;

          基于vue構(gòu)建用戶界面的漸進(jìn)式框架,采用Vue全家桶(vue-router、vuex、vue-cli、axios);

          基于vue的Element UI組件庫(kù)和Vux的前端解決方案;

          Easy mock 模擬后端數(shù)據(jù)結(jié)構(gòu);

          同一套代碼多端使用,即PC端、移動(dòng)端可使用同一套前端代碼;

          控件組件化;

          表單靜態(tài)化,只需生成的代碼其他系統(tǒng)可調(diào)用。

          (二)后端解決方案特點(diǎn)

          采用Spring Cloud的微服務(wù),通過服務(wù)注冊(cè)中心Eureka向外提供注冊(cè)及訪問服務(wù);

          支持使用客戶自己的注冊(cè)中心(基于Eureka),公司主動(dòng)去注冊(cè);

          穩(wěn)定的網(wǎng)關(guān)服務(wù)zuul。提供統(tǒng)一服務(wù)調(diào)用入口,更精準(zhǔn)的對(duì)服務(wù)進(jìn)行權(quán)限、流量等控制;

          同時(shí)支持resful接口方式調(diào)用公司服務(wù),無需注冊(cè)中心及網(wǎng)關(guān)也可正常使用;

          支持集群、分布式服務(wù);

          支持多種組件服務(wù),如:消息服務(wù)、文件服務(wù)、定時(shí)任務(wù)等基礎(chǔ)服務(wù)。

          經(jīng)過上文的長(zhǎng)篇介紹后,大家知道前后端分離怎么部署了嗎?

          如果需要體驗(yàn),可以從這里登錄:https://cloud.bpmhome.cn:280/

          (部分資料來源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系我們刪除)

          作者:山人行
          來源:https://www.cnblogs.com/shanrengo/p/6397734.html
          

          言:分離模式

          對(duì)前后端分離研究了一段時(shí)間,恰逢公司有一個(gè)大項(xiàng)目決定嘗試使用前后端分離模式進(jìn)行,便參與其中。該項(xiàng)目從2016年初立項(xiàng)至今,平平穩(wěn)穩(wěn)得度過,但也涌現(xiàn)出越來越多的問題,絕對(duì)不是說前后端分離模式不好,而是很多公司在嘗試前后端分離的時(shí)候沒有做好充分得準(zhǔn)備。

          網(wǎng)上對(duì)前后端分離介紹的文章已經(jīng)屢見不鮮,接下來本人用一點(diǎn)粗淺的言語也談?wù)勥@塊,獻(xiàn)丑了。



           為什么要分離?

          如果只問“前后端分離的意義大么?”這是廢話,因?yàn)閺能浖軜?gòu)的角度 Web 的前后端從一開始不就一直是分離的么,而且 browser、server 可能將永遠(yuǎn)分離下去。

          為了了解這個(gè)問題,我們有必要先了解一下 Web的研發(fā)模式演變,關(guān)于這個(gè)題材,下面這篇博文說得不錯(cuò),這邊就不做搬運(yùn)工了。

          https://github.com/lifesinger/blog/issues/184

          我們不能“為了分離而分離”,而應(yīng)該“為了真正理解web開發(fā)、為了更好完成需求而分離”。

           前后端分離的誤區(qū)?

          1、前端人員配備是否充足?

          由于所在公司以往項(xiàng)目采用傳統(tǒng)開發(fā)風(fēng)格,即以后端MVC為主的開發(fā)模式,前端人員僅僅提供靜態(tài)html頁面,其余工作皆由后端開發(fā)人員完成。采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。以往只需要提供靜態(tài)頁面的前端人員,在前后端分離模式中要負(fù)責(zé)項(xiàng)目的view+controller部分,即除了靜態(tài)頁面,還需要負(fù)責(zé)頁面的所有交互代碼、以及nodejs與視圖層以及后端API的交互工作,無疑增加了前端人員的學(xué)習(xí)成本,在沒有足夠知識(shí)和人才儲(chǔ)備的情況下,只能讓前端人員加班加點(diǎn)。結(jié)果是大量前端人員離職(PS:做這么多事,工資總得加吧!)

          2、前后端職責(zé)分配?

          很多公司認(rèn)為采用前后端分離之后,前后端只需要通過指定API進(jìn)行交互即可,前端負(fù)責(zé)頁面渲染,Nodejs負(fù)責(zé)路由分配,后端提供API。忽視了大量關(guān)鍵工作,職責(zé)分配和細(xì)節(jié)處理沒有相應(yīng)文檔規(guī)定,緩存機(jī)制、圖片上傳下載、數(shù)據(jù)校驗(yàn)、語言國(guó)際化等等并沒有出具相應(yīng)信息。另外,大量忽視了nodejs層的作用,僅僅把nodejs當(dāng)成一個(gè)路由中轉(zhuǎn),這一方面也是對(duì)nodejs技術(shù)的不熟悉導(dǎo)致的,其實(shí)nodejs能負(fù)責(zé)很多事,除了復(fù)雜業(yè)務(wù)邏輯處理和數(shù)據(jù)操作由Java 負(fù)責(zé),大量工作完全可以在nodejs層處理。(PS:還是基礎(chǔ)不夠?qū)е碌模。?/p>

          3、后端API是否Restful風(fēng)格?

          很多公司采用了前后端分離模式后,后端API仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,Restful風(fēng)格的API應(yīng)該是前后端分離的最佳實(shí)踐。ResultFul推薦每個(gè)URL能操作具體的資源,而且能準(zhǔn)確描述服務(wù)器對(duì)資源的處理動(dòng)作,通常服務(wù)器對(duì)資源支持get/post/put/delete/等,用來實(shí)現(xiàn)資源的增刪改查。前后端分離的話,這些api-url是對(duì)接的橋梁,采用resultFul接口地址含義才更清晰、見名知意。(PS:用了Spring4.x 竟然還不用rest風(fēng)格,說不過去啊)

           4、前后端協(xié)作模式?

          前后端分離后,無論是API接口的對(duì)接還是測(cè)試工作,都涉及到前后端人員的溝通,很多公司采用前后端分離后,前后端協(xié)作模式配合力度底,互相等待,開發(fā)效率低下,反而不如傳統(tǒng)的開發(fā)模式。例如:當(dāng)后端 API 沒有編寫完成時(shí),前端無法進(jìn)行調(diào)試,這就導(dǎo)致了前端會(huì)被后端阻塞的情況。其實(shí)像這種互相等待的模式需要改進(jìn), Mock Server 可能可以解決一些問題。

           如何前后端分離?

          怎么做前后端分離?大方向就是

          后端專注于:后端控制層(Restful API) & 服務(wù)層 & 數(shù)據(jù)訪問層;

          前端專注于:前端控制層(Nodejs) & 視圖層

          本人認(rèn)為的前后端分離模式應(yīng)該是這樣,當(dāng)然這不一定正確:

          1、項(xiàng)目設(shè)計(jì)階段,前后端架構(gòu)負(fù)責(zé)人將項(xiàng)目整體進(jìn)行分析,討論并確定API風(fēng)格、職責(zé)分配、開發(fā)協(xié)助模式,確定人員配備;設(shè)計(jì)確定后,前后端人員共同制定開發(fā)接口。

          2、項(xiàng)目開發(fā)階段,前后端分離是各自分工,協(xié)同敏捷開發(fā),后端提供Restful API,并給出詳細(xì)文檔說明,前端人員進(jìn)行頁面渲染前臺(tái)的任務(wù)是發(fā)送API請(qǐng)(GET,PUT,POST,DELETE等)獲取數(shù)據(jù)(json,xml)后渲染頁面。

          3、項(xiàng)目測(cè)試階段,API完成之前,前端人員會(huì)使用mock server進(jìn)行模擬測(cè)試,后端人員采用junit進(jìn)行API單元測(cè)試,不用互相等待;API完成之后,前后端再對(duì)接測(cè)試一下就可以了,當(dāng)然并不是所有的接口都可以提前定義,有一些是在開發(fā)過程中進(jìn)行調(diào)整的。

          4、項(xiàng)目部署階段,利用nginx 做反向代理,即Java + nodejs + nginx 方式進(jìn)行。


           編后語

          從經(jīng)典的JSP+Servlet+JavaBean的MVC時(shí)代,到SSM(Spring + SpringMVC + Mybatis)和SSH(Spring + Struts + Hibernate)的Java 框架時(shí)代,再到前端框架(KnockoutJS、AngularJS、vueJS、ReactJS)為主的MV*時(shí)代,然后是Nodejs引領(lǐng)的全棧時(shí)代,技術(shù)和架構(gòu)一直都在進(jìn)步。雖然“基于NodeJS的全棧式開發(fā)”模式很讓人興奮,但是把基于Node的全棧開發(fā)變成一個(gè)穩(wěn)定,讓大家都能接受的東西還有很多路要走。創(chuàng)新之路不會(huì)止步,無論是前后端分離模式還是其他模式,都是為了更方便得解決需求,但它們都只是一個(gè)“中轉(zhuǎn)站”。

          走過的“中轉(zhuǎn)站”可能越來越多,但是不要漸行漸遠(yuǎn)才是。

          注于Java領(lǐng)域優(yōu)質(zhì)技術(shù),歡迎關(guān)注

          作 者:Cherry300

          來 源:jianshu.com/p/c86cee16b418

          一、前戲

          前后端分離已成為互聯(lián)網(wǎng)項(xiàng)目開發(fā)的業(yè)界標(biāo)準(zhǔn)使用方式,通過nginx+tomcat的方式(也可以中間加一個(gè)nodejs)有效的進(jìn)行解耦,并且前后端分離會(huì)為以后的大型分布式架構(gòu)、彈性計(jì)算架構(gòu)、微服務(wù)架構(gòu)、多端化服務(wù)(多種客戶端,例如:瀏覽器,車載終端,安卓,IOS等等)打下堅(jiān)實(shí)的基礎(chǔ)。這個(gè)步驟是系統(tǒng)架構(gòu)從猿進(jìn)化成人的必經(jīng)之路。

          核心思想是前端html頁面通過ajax調(diào)用后端的restuful api接口并使用json數(shù)據(jù)進(jìn)行交互。

          在互聯(lián)網(wǎng)架構(gòu)中,名詞解釋:

          Web服務(wù)器:一般指像nginx,apache這類的服務(wù)器,他們一般只能解析靜態(tài)資源。

          應(yīng)用服務(wù)器:一般指像tomcat,jetty,resin這類的服務(wù)器可以解析動(dòng)態(tài)資源也可以解析靜態(tài)資源,但解析靜態(tài)資源的能力沒有web服務(wù)器好。

          一般都是只有web服務(wù)器才能被外網(wǎng)訪問,應(yīng)用服務(wù)器只能內(nèi)網(wǎng)訪問。

          二、術(shù)業(yè)有專攻(開發(fā)人員分離)

          以前的JavaWeb項(xiàng)目大多數(shù)都是java程序員又當(dāng)?shù)之?dāng)媽,又搞前端,又搞后端。

          隨著時(shí)代的發(fā)展,漸漸的許多大中小公司開始把前后端的界限分的越來越明確,前端工程師只管前端的事情,后端工程師只管后端的事情。正所謂術(shù)業(yè)有專攻,一個(gè)人如果什么都會(huì),那么他畢竟什么都不精。

          大中型公司需要專業(yè)人才,小公司需要全才,但是對(duì)于個(gè)人職業(yè)發(fā)展來說,我建議是分開。

          1、對(duì)于后端java工程師:

          把精力放在java基礎(chǔ),設(shè)計(jì)模式,jvm原理,spring+springmvc原理及源碼,linux,mysql事務(wù)隔離與鎖機(jī)制,mongodb,http/tcp,多線程,分布式架構(gòu),彈性計(jì)算架構(gòu),微服務(wù)架構(gòu),java性能優(yōu)化,以及相關(guān)的項(xiàng)目管理等等。

          后端追求的是:三高(高并發(fā),高可用,高性能),安全,存儲(chǔ),業(yè)務(wù)等等。

          2、對(duì)于前端工程師:

          把精力放在html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8引擎,javascript多線程,模塊化,面向切面編程,設(shè)計(jì)模式,瀏覽器兼容性,性能優(yōu)化等等。

          前端追求的是:頁面表現(xiàn),速度流暢,兼容性,用戶體驗(yàn)等等。

          術(shù)業(yè)有專攻,這樣你的核心競(jìng)爭(zhēng)力才會(huì)越來越高,正所謂你往生活中投入什么,生活就會(huì)反饋給你什么。并且兩端的發(fā)展都越來越高深,你想什么都會(huì),那你畢竟什么都不精。

          通過將team分成前后端team,讓兩邊的工程師更加專注各自的領(lǐng)域,獨(dú)立治理,然后構(gòu)建出一個(gè)全棧式的精益求精的team。

          三、原始人時(shí)代(各種耦合)

          幾曾何時(shí),我們的JavaWeb項(xiàng)目都是使用了若干后臺(tái)框架,springmvc/struts + spring + spring jdbc/hibernate/mybatis 等等。

          大多數(shù)項(xiàng)目在java后端都是分了三層,控制層,業(yè)務(wù)層,持久層。控制層負(fù)責(zé)接收參數(shù),調(diào)用相關(guān)業(yè)務(wù)層,封裝數(shù)據(jù),以及路由&渲染到j(luò)sp頁面。然后jsp頁面上使用各種標(biāo)簽或者手寫java表達(dá)式將后臺(tái)的數(shù)據(jù)展現(xiàn)出來,玩的是MVC那套思路。

          我們先看這種情況:需求定完了,代碼寫完了,測(cè)試測(cè)完了,然后呢?要發(fā)布了吧?你需要用maven或者eclipse等工具把你的代碼打成一個(gè)war包,然后把這個(gè)war包發(fā)布到你的生產(chǎn)環(huán)境下的web容器里,對(duì)吧?

          發(fā)布完了之后,你要啟動(dòng)你的web容器,開始提供服務(wù),這時(shí)候你通過配置域名,dns等等相關(guān),你的網(wǎng)站就可以訪問了(假設(shè)你是個(gè)網(wǎng)站)。那我們來看,你的前后端代碼是不是全都在那個(gè)war包里?包括你的js,css,圖片,各種第三方的庫(kù),對(duì)吧?

          好,下面在瀏覽器中輸入你的網(wǎng)站域名(www.xxx.com),之后發(fā)生了什么?(這個(gè)問題也是很多公司的面試題)我撿干的說了啊,基礎(chǔ)不好的童鞋請(qǐng)自己去搜。

          瀏覽器在通過域名通過dns服務(wù)器找到你的服務(wù)器外網(wǎng)ip,將http請(qǐng)求發(fā)送到你的服務(wù)器,在tcp3次握手之后(http下面是tcp/ip),通過tcp協(xié)議開始傳輸數(shù)據(jù),你的服務(wù)器得到請(qǐng)求后,開始提供服務(wù),接收參數(shù),之后返回你的應(yīng)答給瀏覽器,瀏覽器再通過content-type來解析你返回的內(nèi)容,呈現(xiàn)給用戶。

          那么我們來看,我們先假設(shè)你的首頁中有100張圖片,此時(shí),用戶的看似一次http請(qǐng)求,其實(shí)并不是一次,用戶在第一次訪問的時(shí)候,瀏覽器中不會(huì)有緩存,你的100張圖片,瀏覽器要連著請(qǐng)求100次http請(qǐng)求(有人會(huì)跟我說http長(zhǎng)連短連的問題,不在這里討論),你的服務(wù)器接收這些請(qǐng)求,都需要耗費(fèi)內(nèi)存去創(chuàng)建socket來玩tcp傳輸(消耗你服務(wù)器上的計(jì)四、JSP的痛點(diǎn)

          以前的javaWeb項(xiàng)目大多數(shù)使用jsp作為頁面層展示數(shù)據(jù)給用戶,因?yàn)榱髁坎桓撸虼艘矝]有那么苛刻的性能要求,但現(xiàn)在是大數(shù)據(jù)時(shí)代,對(duì)于互聯(lián)網(wǎng)項(xiàng)目的性能要求是越來越高,因此原始的前后端耦合在一起的架構(gòu)模式已經(jīng)逐漸不能滿足我們,因此我們需要需找一種解耦的方式,來大幅度提升我們的負(fù)載能力。

          1、動(dòng)態(tài)資源和靜態(tài)資源全部耦合在一起,服務(wù)器壓力大,因?yàn)榉?wù)器會(huì)收到各種http請(qǐng)求,例如css的http請(qǐng)求,js的,圖片的等等。一旦服務(wù)器出現(xiàn)狀況,前后臺(tái)一起玩完,用戶體驗(yàn)極差。

          2、UI出好設(shè)計(jì)圖后,前端工程師只負(fù)責(zé)將設(shè)計(jì)圖切成html,需要由java工程師來將html套成jsp頁面,出錯(cuò)率較高(因?yàn)轫撁嬷薪?jīng)常會(huì)出現(xiàn)大量的js代碼),修改問題時(shí)需要雙方協(xié)同開發(fā),效率低下。

          3、jsp必須要在支持java的web服務(wù)器里運(yùn)行(例如tomcat,jetty,resin等),無法使用nginx等(nginx據(jù)說單實(shí)例http并發(fā)高達(dá)5w,這個(gè)優(yōu)勢(shì)要用上),性能提不上來。

          4、第一次請(qǐng)求jsp,必須要在web服務(wù)器中編譯成servlet,第一次運(yùn)行會(huì)較慢。

          5、每次請(qǐng)求jsp都是訪問servlet再用輸出流輸出的html頁面,效率沒有直接使用html高(是每次喲,親~)。

          6、jsp內(nèi)有較多標(biāo)簽和表達(dá)式,前端工程師在修改頁面時(shí)會(huì)捉襟見肘,遇到很多痛點(diǎn)。

          7、如果jsp中的內(nèi)容很多,頁面響應(yīng)會(huì)很慢,因?yàn)槭峭郊虞d。

          8、需要前端工程師使用java的ide(例如eclipse),以及需要配置各種后端的開發(fā)環(huán)境,你們有考慮過前端工程師的感受嗎。

          基于上述的一些痛點(diǎn),我們應(yīng)該把整個(gè)項(xiàng)目的開發(fā)權(quán)重往前移,實(shí)現(xiàn)前后端真正的解耦!

          五、開發(fā)模式

          以前老的方式是:

          1、產(chǎn)品經(jīng)歷/領(lǐng)導(dǎo)/客戶提出需求

          2、UI做出設(shè)計(jì)圖

          3、前端工程師做html頁面

          4、后端工程師將html頁面套成jsp頁面(前后端強(qiáng)依賴,后端必須要等前端的html做好才能套jsp。如果html發(fā)生變更,就更痛了,開發(fā)效率低)

          5、集成出現(xiàn)問題

          6、前端返工

          7、后端返工

          8、二次集成

          9、集成成功

          10、交付

          新的方式是:

          1、產(chǎn)品經(jīng)歷/領(lǐng)導(dǎo)/客戶提出需求

          2、UI做出設(shè)計(jì)圖

          3、前后端約定接口&數(shù)據(jù)&參數(shù)

          4、前后端并行開發(fā)(無強(qiáng)依賴,可前后端并行開發(fā),如果需求變求變更,只要接口&參數(shù)不變,就不用兩邊都修改代碼,開發(fā)效率高)

          5、前后端集成

          6、前端頁面調(diào)整

          7、集成成功

          8、交付

          六、請(qǐng)求方式

          以前老的方式是:

          1、客戶端請(qǐng)求

          2、服務(wù)端的servlet或controller接收請(qǐng)求(后端控制路由與渲染頁面,整個(gè)項(xiàng)目開發(fā)的權(quán)重大部分在后端)

          3、調(diào)用service,dao代碼完成業(yè)務(wù)邏輯

          4、返回jsp

          5、jsp展現(xiàn)一些動(dòng)態(tài)的代碼

          新的方式是:

          1、瀏覽器發(fā)送請(qǐng)求

          2、直接到達(dá)html頁面(前端控制路由與渲染頁面,整個(gè)項(xiàng)目開發(fā)的權(quán)重前移)

          3、html頁面負(fù)責(zé)調(diào)用服務(wù)端接口產(chǎn)生數(shù)據(jù)(通過ajax等等,后臺(tái)返回json格式數(shù)據(jù),json數(shù)據(jù)格式因?yàn)楹?jiǎn)潔高效而取代xml)

          4、填充html,展現(xiàn)動(dòng)態(tài)效果,在頁面上進(jìn)行解析并操作DOM。

          總結(jié)一下新的方式的請(qǐng)求步驟:

          大量并發(fā)瀏覽器請(qǐng)求--->web服務(wù)器集群(nginx)--->應(yīng)用服務(wù)器集群(tomcat)--->文件/數(shù)據(jù)庫(kù)/緩存/消息隊(duì)列服務(wù)器集群

          同時(shí)又可以玩分模塊,還可以按業(yè)務(wù)拆成一個(gè)個(gè)的小集群,為后面的架構(gòu)升級(jí)做準(zhǔn)備。

          七、前后分離的優(yōu)勢(shì)

          1、可以實(shí)現(xiàn)真正的前后端解耦,前端服務(wù)器使用nginx。前端/WEB服務(wù)器放的是css,js,圖片等等一系列靜態(tài)資源(甚至你還可以css,js,圖片等資源放到特定的文件服務(wù)器,例如阿里云的oss,并使用cdn加速),前端服務(wù)器負(fù)責(zé)控制頁面引用&跳轉(zhuǎn)&路由,前端頁面異步調(diào)用后端的接口,后端/應(yīng)用服務(wù)器使用tomcat(把tomcat想象成一個(gè)數(shù)據(jù)提供者),加快整體響應(yīng)速度。(這里需要使用一些前端工程化的框架比如nodejs,react,router,react,redux,webpack)

          2、發(fā)現(xiàn)bug,可以快速定位是誰的問題,不會(huì)出現(xiàn)互相踢皮球的現(xiàn)象。頁面邏輯,跳轉(zhuǎn)錯(cuò)誤,瀏覽器兼容性問題,腳本錯(cuò)誤,頁面樣式等問題,全部由前端工程師來負(fù)責(zé)。接口數(shù)據(jù)出錯(cuò),數(shù)據(jù)沒有提交成功,應(yīng)答超時(shí)等問題,全部由后端工程師來解決。雙方互不干擾,前端與后端是相親相愛的一家人。

          3、在大并發(fā)情況下,我可以同時(shí)水平擴(kuò)展前后端服務(wù)器,比如淘寶的一個(gè)首頁就需要2000+臺(tái)前端服務(wù)器做集群來抗住日均多少億+的日均pv。(去參加阿里的技術(shù)峰會(huì),聽他們說他們的web容器都是自己寫的,就算他單實(shí)例抗10萬http并發(fā),2000臺(tái)是2億http并發(fā),并且他們還可以根據(jù)預(yù)知洪峰來無限拓展,很恐怖,就一個(gè)首頁。。。)

          4、減少后端服務(wù)器的并發(fā)/負(fù)載壓力。除了接口以外的其他所有http請(qǐng)求全部轉(zhuǎn)移到前端nginx上,接口的請(qǐng)求調(diào)用tomcat,參考nginx反向代理tomcat。且除了第一次頁面請(qǐng)求外,瀏覽器會(huì)大量調(diào)用本地緩存。

          5、即使后端服務(wù)暫時(shí)超時(shí)或者宕機(jī)了,前端頁面也會(huì)正常訪問,只不過數(shù)據(jù)刷不出來而已。

          6、也許你也需要有微信相關(guān)的輕應(yīng)用,那樣你的接口完全可以共用,如果也有app相關(guān)的服務(wù),那么只要通過一些代碼重構(gòu),也可以大量復(fù)用接口,提升效率。(多端應(yīng)用)

          7、頁面顯示的東西再多也不怕,因?yàn)槭钱惒郊虞d。

          8、nginx支持頁面熱部署,不用重啟服務(wù)器,前端升級(jí)更無縫。

          9、增加代碼的維護(hù)性&易讀性(前后端耦在一起的代碼讀起來相當(dāng)費(fèi)勁)。

          10、提升開發(fā)效率,因?yàn)榭梢郧昂蠖瞬⑿虚_發(fā),而不是像以前的強(qiáng)依賴。

          11、在nginx中部署證書,外網(wǎng)使用https訪問,并且只開放443和80端口,其他端口一律關(guān)閉(防止黑客端口掃描),內(nèi)網(wǎng)使用http,性能和安全都有保障。

          12、前端大量的組件代碼得以復(fù)用,組件化,提升開發(fā)效率,抽出來!

          八、注意事項(xiàng)

          1、在開需求會(huì)議的時(shí)候,前后端工程師必須全部參加,并且需要制定好接口文檔,后端工程師要寫好測(cè)試用例(2個(gè)維度),不要讓前端工程師充當(dāng)你的專職測(cè)試,推薦使用chrome的插件postman或soapui或jmeter,service層的測(cè)試用例拿junit寫。ps:前端也可以玩單元測(cè)試嗎?

          2、上述的接口并不是java里的interface,說白了調(diào)用接口就是調(diào)用你controler里的方法。

          3、加重了前端團(tuán)隊(duì)的工作量,減輕了后端團(tuán)隊(duì)的工作量,提高了性能和可擴(kuò)展性。

          4、我們需要一些前端的框架來解決類似于頁面嵌套,分頁,頁面跳轉(zhuǎn)控制等功能。(上面提到的那些前端框架)。

          5、如果你的項(xiàng)目很小,或者是一個(gè)單純的內(nèi)網(wǎng)項(xiàng)目,那你大可放心,不用任何架構(gòu)而言,但是如果你的項(xiàng)目是外網(wǎng)項(xiàng)目,呵呵噠。

          6、 以前還有人在使用類似于velocity/freemarker等模板框架來生成靜態(tài)頁面,仁者見仁智者見智。

          7、這篇文章主要的目的是說jsp在大型外網(wǎng)java web項(xiàng)目中被淘汰掉,可沒說jsp可以完全不學(xué),對(duì)于一些學(xué)生朋友來說,jsp/servlet等相關(guān)的java web基礎(chǔ)還是要掌握牢的,不然你以為springmvc這種框架是基于什么來寫的?

          8、如果頁面上有一些權(quán)限等等相關(guān)的校驗(yàn),那么這些相關(guān)的數(shù)據(jù)也可以通過ajax從接口里拿。

          9、對(duì)于既可以前端做也可以后端做的邏輯,我建議是放到前端,為什么?因?yàn)槟愕倪壿嬓枰?jì)算資源進(jìn)行計(jì)算,如果放到后端去run邏輯,則會(huì)消耗帶寬&內(nèi)存&cpu等等計(jì)算資源,你要記住一點(diǎn)就是服務(wù)端的計(jì)算資源是有限的,而如果放到前端,使用的是客戶端的計(jì)算資源,這樣你的服務(wù)端負(fù)載就會(huì)下降(高并發(fā)場(chǎng)景)。類似于數(shù)據(jù)校驗(yàn)這種,前后端都需要做!

          10、前端需要有機(jī)制應(yīng)對(duì)后端請(qǐng)求超時(shí)以及后端服務(wù)宕機(jī)的情況,友好的展示給用戶。

          九、擴(kuò)展閱讀

          1、其實(shí)對(duì)于js,css,圖片這類的靜態(tài)資源可以考慮放到類似于阿里云的oss這類文件服務(wù)器上(如果是普通的服務(wù)器&操作系統(tǒng),存儲(chǔ)在到達(dá)pb級(jí)的文件后,或者單個(gè)文件夾內(nèi)的文件數(shù)量達(dá)到3-5萬,io會(huì)有很嚴(yán)重的性能問題),再在oss上配cdn(全國(guó)子節(jié)點(diǎn)加速),這樣你頁面打開的速度像飛一樣, 無論你在全國(guó)的哪個(gè)地方,并且你的nginx的負(fù)載會(huì)進(jìn)一步降低。

          2、如果你要玩輕量級(jí)微服務(wù)架構(gòu),要使用nodejs做網(wǎng)關(guān),用nodejs的好處還有利于seo優(yōu)化,因?yàn)閚ginx只是向?yàn)g覽器返回頁面靜態(tài)資源,而國(guó)內(nèi)的搜索引擎爬蟲只會(huì)抓取靜態(tài)數(shù)據(jù),不會(huì)解析頁面中的js,這使得應(yīng)用得不到良好的搜索引擎支持。同時(shí)因?yàn)閚ginx不會(huì)進(jìn)行頁面的組裝渲染,需要把靜態(tài)頁面返回到瀏覽器,然后完成渲染工作,這加重了瀏覽器的渲染負(fù)擔(dān)。瀏覽器發(fā)起的請(qǐng)求經(jīng)過nginx進(jìn)行分發(fā),URL請(qǐng)求統(tǒng)一分發(fā)到nodejs,在nodejs中進(jìn)行頁面組裝渲染;API請(qǐng)求則直接發(fā)送到后端服務(wù)器,完成響應(yīng)。

          3、如果遇到跨域問題,spring4的CORS可以完美解決,但一般使用nginx反向代理都不會(huì)有跨域問題,除非你把前端服務(wù)和后端服務(wù)分成兩個(gè)域名。JSONP的方式也被淘汰掉了。

          4、如果想玩多端應(yīng)用,注意要去掉tomcat原生的session機(jī)制,要使用token機(jī)制,使用緩存(因?yàn)槭欠植际较到y(tǒng)),做單點(diǎn),對(duì)于token機(jī)制的安全性問題,可以搜一下jwt。

          5、前端項(xiàng)目中可以加入mock測(cè)試(構(gòu)造虛擬測(cè)試對(duì)象來模擬后端,可以獨(dú)立開發(fā)和測(cè)試),后端需要有詳細(xì)的測(cè)試用例,保證服務(wù)的可用性與穩(wěn)定性。

          十、總結(jié)

          前后端分離并非僅僅只是一種開發(fā)模式,而是一種架構(gòu)模式(前后端分離架構(gòu))。千萬不要以為只有在擼代碼的時(shí)候把前端和后端分開就是前后端分離了,需要區(qū)分前后端項(xiàng)目。前端項(xiàng)目與后端項(xiàng)目是兩個(gè)項(xiàng)目,放在兩個(gè)不同的服務(wù)器,需要獨(dú)立部署,兩個(gè)不同的工程,兩個(gè)不同的代碼庫(kù),不同的開發(fā)人員。

          前后端工程師需要約定交互接口,實(shí)現(xiàn)并行開發(fā),開發(fā)結(jié)束后需要進(jìn)行獨(dú)立部署,前端通過ajax來調(diào)用http請(qǐng)求調(diào)用后端的restful api。前端只需要關(guān)注頁面的樣式與動(dòng)態(tài)數(shù)據(jù)的解析&渲染,而后端專注于具體業(yè)務(wù)邏輯。

          4、如果想玩多端應(yīng)用,注意要去掉tomcat原生的session機(jī)制,要使用token機(jī)制,使用緩存(因?yàn)槭欠植际较到y(tǒng)),做單點(diǎn),對(duì)于token機(jī)制的安全性問題,可以搜一下jwt。


          最近無意中發(fā)現(xiàn)了一個(gè)巨牛的人工智能教程,忍不住分享一下給大家。教程不僅是零基礎(chǔ),通俗易懂,而且非常風(fēng)趣幽默,像看小說一樣!覺得太牛了,所以分享給大家。點(diǎn)下面鏈接可以跳轉(zhuǎn)到教程。

          https://www.captainbed.net/suga


          主站蜘蛛池模板: 精品成人av一区二区三区| 亚洲日韩一区精品射精| 无码精品人妻一区二区三区AV| 亚洲综合色自拍一区| 国内精自品线一区91| 久久中文字幕无码一区二区 | 看电影来5566一区.二区| 中文字幕不卡一区| 日韩精品无码久久一区二区三| 日韩一区二区三区射精| 亚洲日韩AV无码一区二区三区人| 日韩在线不卡免费视频一区| 亚洲线精品一区二区三区影音先锋 | 国产一区二区三区高清在线观看 | 日韩在线一区高清在线| 日本精品高清一区二区2021| 老湿机一区午夜精品免费福利| 国产凸凹视频一区二区| 91国在线啪精品一区| 亚洲AV无码一区二区乱子伦| 国产经典一区二区三区蜜芽| 亚洲AV日韩AV一区二区三曲| 国产人妖在线观看一区二区| 中文字幕精品无码一区二区| 久久精品无码一区二区WWW| 欧美日韩国产免费一区二区三区| 日韩精品一区二区三区视频| 亚洲国产成人一区二区三区 | 日韩精品中文字幕无码一区| 日韩精品福利视频一区二区三区| 中文字幕VA一区二区三区| 91午夜精品亚洲一区二区三区| 国产一区二区三区美女| 无码少妇一区二区| AV无码精品一区二区三区宅噜噜| 人妻无码一区二区不卡无码av| 国产精品被窝福利一区| 在线观看视频一区二区| 亚洲欧洲日韩国产一区二区三区| 国产在线精品一区二区夜色| 精品久久久久久无码中文字幕一区|