前端體系
想要成為真正的互聯(lián)網(wǎng)Java全棧工程師剧辐,前端是繞不開的一門必修課。
接下來我們就來認(rèn)識(shí)前端蜘醋、了解前端胁塞、掌握前端,為成為互聯(lián)網(wǎng)Java全棧工程師而前進(jìn)压语。
前端三要素
前端三要素為:
- HTML(結(jié)構(gòu)):超文本標(biāo)記語言(Hyper Text Markup Language)啸罢,決定網(wǎng)頁的結(jié)構(gòu)和內(nèi)容。
- CSS(表現(xiàn)):層疊樣式表(Cascading Style Sheets)胎食,設(shè)定網(wǎng)頁的表現(xiàn)樣式扰才。
- Javascript(行為):是一種弱類型腳本語言,其源代碼不需經(jīng)過編譯厕怜,而是由瀏覽器解釋運(yùn)行衩匣,用于控制網(wǎng)頁的行為。
結(jié)構(gòu)層(HTML)比較簡單粥航,省略琅捏。
表現(xiàn)層(CSS)
CSS 層疊樣式表是一門標(biāo)記語言,并不是編程語言递雀,因此不可以自定義變量柄延,不可以引用等,換句話說就是不具備任何語法支持缀程。
它的主要缺陷如下:
- 語法不夠強(qiáng)大搜吧,例如無法嵌套書寫市俊,導(dǎo)致模塊化開發(fā)中需要書寫很多重復(fù)的選擇器。
- 沒有變量和合理的樣式復(fù)用機(jī)制滤奈,使得邏輯上相關(guān)的屬性值必須以字面量的形式重復(fù)輸出秕衙,導(dǎo)致難以維護(hù)。
因?yàn)檫@些缺陷導(dǎo)致我們?cè)诠ぷ髦袩o端增加了許多工作量僵刮。為了解決這個(gè)問題,前端開發(fā)人員會(huì)使用一種稱之為CSS 預(yù)處理器的工具鹦牛,提供 CSS 缺失的樣式層復(fù)用機(jī)制搞糕、減少冗余代碼,提高樣式代碼的可維護(hù)性曼追。大大提高了前端在樣式上的開發(fā)效率窍仰。
什么是CSS預(yù)處理器?
CSS 預(yù)處理器定義了一種新的語言礼殊,其基本思想是驹吮,用一種專門的編程語言,為 CSS 增加了一些編程的特性晶伦,將 CSS 作為目標(biāo)生成文件碟狞,然后開發(fā)者就只要使用這種語言進(jìn)行 CSS 的編碼工作。
簡單來說就是:用一種專門的編程語言婚陪,進(jìn)行 Web 頁面樣式設(shè)計(jì)族沃,再通過編譯器轉(zhuǎn)化為正常的 CSS 文件,以供項(xiàng)目使用泌参。
常用的CSS預(yù)處理器
- SASS脆淹,基于 Ruby,通過服務(wù)端處理沽一,功能強(qiáng)大盖溺。解析效率高。需要學(xué)習(xí) Ruby 語言铣缠,上手難度高于LESS烘嘱。
-
LESS,基于 NodeJS攘残,通過客戶端處理拙友,使用簡單。功能比 SASS 簡單歼郭,解析效率也低于 SASS遗契,但在實(shí)際開發(fā)中足夠了,所以后臺(tái)人員一般建議使用 LESS病曾。
一些大型的網(wǎng)站每到一些節(jié)日的時(shí)候都有一套不一樣的皮膚牍蜂。其實(shí)是因?yàn)樗麄冊(cè)诤笈_(tái)已經(jīng)編寫好了多套主題漾根,要使用的時(shí)候通過LESS一鍵切換。
行為層(Javascript)
JavaScript 一門弱類型腳本語言鲫竞,其源代碼在發(fā)往客戶端運(yùn)行之前不需經(jīng)過編譯辐怕,而是將文本格式的字符代碼發(fā)送給瀏覽器由瀏覽器解釋運(yùn)行。
Native原生JS開發(fā)
原生JS開發(fā)从绘,也就是讓我們按照ECMAScript標(biāo)準(zhǔn)的開發(fā)方式寄疏,簡稱是 ES,特點(diǎn)是支持所有瀏覽器僵井。ES 標(biāo)準(zhǔn)已發(fā)布如下版本:
- ES3
- ES4(內(nèi)部陕截,未正式發(fā)布)
- ES5(全瀏覽器支持)
- ES6(常用,當(dāng)前主流版本批什,webpack打包成為ES5支持)
- ES7
- ES8
- ES9(草案階段)
從ES6開始每年發(fā)布一個(gè)版本农曲,以年份作為名稱,區(qū)別就是逐步增加新特性驻债。
微軟的標(biāo)準(zhǔn):TypeScript
TypeScript 是一種由微軟開發(fā)的自由和開源的編程語言乳规。它是 JavaScript 的一個(gè)超集,而且本質(zhì)上向這個(gè)語言添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊毯夏拧S砂驳滤埂ず査共瘢–#暮的、Delphi、 TypeScript 之父淌实,.NET創(chuàng)立者)主導(dǎo)青扔。
Javascript框架
jQuery
大家最熟知的Javascript庫。優(yōu)點(diǎn)是簡化了 DOM 操作翩伪,缺點(diǎn)是DOM 操作太頻繁微猖,影響前端性能。在前端眼里使用它僅僅是為了兼容 IE6缘屹、7凛剥、8。
Angular
Google收購的前端框架轻姿,由一群Java程序員開發(fā)犁珠,其特點(diǎn)是將后臺(tái)的MVC模式搬到了前端并增加了模塊化開發(fā)的理念,與微軟合作互亮,采用TypeScript 語法開發(fā)犁享。對(duì)后臺(tái)程序員友好,對(duì)前端程序員不太友好豹休。最大的缺點(diǎn)是版本迭代不合理炊昆,如:1代 -> 2代,除了名字,基本就是兩個(gè)東西凤巨,已推出了Angular6视乐。
React
Facebook出品,一款高性能的 JS 前端框架敢茁。特點(diǎn)是提出了新概念虛擬 DOM用于減少真實(shí)DOM操作佑淀,在內(nèi)存中模擬DOM操作,有效的提升了前端渲染效率彰檬,缺點(diǎn)是使用復(fù)雜伸刃,因?yàn)樾枰~外學(xué)習(xí)一門JSX語言。
Vue
一款漸進(jìn)式Javascript 框架逢倍,所謂漸進(jìn)式就是逐步實(shí)現(xiàn)新特性的意思奕枝,如實(shí)現(xiàn)模塊化開發(fā)、路由瓶堕、狀態(tài)管理等新特性。
其特點(diǎn)是綜合了 Angular(模塊化) 和 React(虛擬 DOM) 的優(yōu)點(diǎn)症歇。
Axios
前端通信框架郎笆。因?yàn)閂ue 的邊界很明確,就是為了處理 DOM忘晤,所以并不具備通信能力宛蚓,此時(shí)就需要額外使用一個(gè)通信框架與服務(wù)器交互,當(dāng)然也可以直接選擇使用jQuery提供的 AJAX 通信功能设塔。
Javascript構(gòu)建工具
- Babel:JS 編譯工具凄吏,主要用于瀏覽器不支持的 ES 新特性,比如用于編譯TypeScript闰蛔。
- WebPack:模塊打包器痕钢,主要作用是打包、壓縮序六、合并及按序加載任连。
前端需要掌握的后端技術(shù)
前端人員為了方便開發(fā)也需要掌握一定的后端技術(shù),但Java 后臺(tái)人員知道后臺(tái)知識(shí)體系極其龐大復(fù)雜例诀,所以為了方便前端人員開發(fā)后臺(tái)應(yīng)用随抠,就出現(xiàn)了Node.js這樣的技術(shù)。
Node.js的作者已經(jīng)聲稱放棄 Node.js(可能是因?yàn)榧軜?gòu)做的不好再加上笨重的 node_modules讓作者不爽了)繁涂,并且開始開發(fā)全新架構(gòu)的Deno拱她。
既然是后臺(tái)技術(shù),那肯定也需要框架和項(xiàng)目管理工具扔罪,Node.js框架及項(xiàng)目管理工具如下:
- Express:Node.js框架秉沼。
- Koa:Express簡化版。
- NPM:項(xiàng)目綜合管理工具,類似于Maven氧猬。
- YARN:NPM的替代方案背犯,類似于Maven和Gradle的關(guān)系。
UI框架
常用框架
- Ant-Design:阿里巴巴出品盅抚,基于 React 的 UI 框架漠魏。
- ElementUI、iview妄均、ice:餓了么出品柱锹,基于 Vue 的 UI 框架。
- Bootstrap:Twitter 推出的一個(gè)用于前端開發(fā)的開源工具包丰包。
- AmazeUI:又叫“妹子 UI”禁熏,一款 HTML5 跨屏前端框架。
- Layui:輕量級(jí)框架(Layer)邑彪。
iView
iView是一個(gè)強(qiáng)大的基于 Vue 的 UI 庫瞧毙,有很多實(shí)用的基礎(chǔ)組件比ElementUI的組件更豐富,主要服務(wù)于PC界面的中后臺(tái)產(chǎn)品寄症。使用單文件的Vue組件化開發(fā)模式宙彪,基于npm + webpack + babel
開發(fā),支持ES2015(ES6)高質(zhì)量有巧、功能豐富释漆、友好的 API ,自由靈活地使用空間篮迎。
官網(wǎng)地址: https://www.iviewui.com/
Github: https://github.com/TalkingData/iview-weapp
iview-admin: https://github.com/iview/iview-admin
備注:屬于前端主流框架男图,選型時(shí)可考慮使用,主要特點(diǎn)是移動(dòng)端支持較多甜橱。
ElementUI
ElementUI是餓了么前端開源維護(hù)的Vue UI組件庫逊笆,組件齊全,基本涵蓋后臺(tái)所需的所有組件岂傲,文檔講解詳細(xì)览露,例子也很豐富。主要用于開發(fā)PC端的頁面譬胎,是一個(gè)質(zhì)量比較高的Vue UI組件庫差牛。
官網(wǎng)地址:http://element-cn.eleme.io/#/zh-CN
Github:https://github.com/ElementUI/element-starter
vue-element-admin:https://github.com/PanJiaChen/vue-element-admin
備注:屬于前端主流框架,選型時(shí)可考慮使用堰乔,主要特點(diǎn)是桌面端支持較多偏化。
ICE
飛冰是阿里巴巴團(tuán)隊(duì)基于React/Angular/Vue 的中后臺(tái)應(yīng)用解決方案,在阿里巴巴內(nèi)部镐侯,已經(jīng)有270多個(gè)來自幾乎所有BU 的項(xiàng)目在使用侦讨。飛冰包含了一條從設(shè)計(jì)端到開發(fā)端的完整鏈路驶冒,幫助用戶快速搭建屬于自己的中后臺(tái)應(yīng)用。
官網(wǎng)地址:https://alibaba.github.io/ice
Github:https://github.com/alibaba/ice
備注:主要組件還是以React 為主韵卤,截止2019年2月17日更新博客前對(duì) Vue 的支持還不太完善骗污,目前尚處于觀望階段。
VantUI
VantUI是有贊前端團(tuán)隊(duì)基于有贊統(tǒng)一的規(guī)范實(shí)現(xiàn)的Vue組件庫沈条,提供了一整套UI基礎(chǔ)組件和業(yè)務(wù)組件需忿。通過VantUI,可以快速搭建出風(fēng)格統(tǒng)一的頁面蜡歹,提升開發(fā)效率屋厘。
官網(wǎng)地址:https://youzan.github.io/vant/#/zh-CN/intro
Github:https://github.com/youzan
AtUI
AtUI是一款基于Vue 2.x的前端UI組件庫,主要用于快速開發(fā)PC網(wǎng)站產(chǎn)品月而。 它提供了一套npm + webpack + babel
前端開發(fā)工作流程汗洒,CSS樣式獨(dú)立,即使采用不同的框架實(shí)現(xiàn)都能保持統(tǒng)一的UI風(fēng)格父款。
官網(wǎng)地址:https://at-ui.github.io/at-ui/#/zh
Github:https://github.com/at-ui/at-ui
CubeUI
CubeUI是滴滴團(tuán)隊(duì)開發(fā)的基于Vue.js實(shí)現(xiàn)的精致移動(dòng)端組件庫溢谤。支持按需引入和后編譯,輕量靈活憨攒,擴(kuò)展性強(qiáng)世杀,可以方便地基于現(xiàn)有組件實(shí)現(xiàn)二次開發(fā)。
官網(wǎng)地址:https://didi.github.io/cube-ui/#/zh-CN
Github:https://github.com/didi/cube-ui/
Flutter
Flutter是谷歌的移動(dòng)端UI框架浓恶,可在極短的時(shí)間內(nèi)構(gòu)建Android和iOS上高質(zhì)量的原生級(jí)應(yīng)用。Flutter可與現(xiàn)有代碼一起工作, 它被世界各地的開發(fā)者和組織使用, 并且Flutter是免費(fèi)和開源的结笨。
官網(wǎng)地址:https://flutter.dev/docs
Github:https://github.com/flutter/flutter
備注:Google出品包晰,主要特點(diǎn)是快速構(gòu)建原生APP應(yīng)用程序,如做混合應(yīng)用該框架為必選框架炕吸。
Ionic
Ionic 既是一個(gè)CSS框架也是一個(gè)Javascript UI庫伐憾,Ionic是目前最有潛力的一款HTML5手機(jī)應(yīng)用開發(fā)框架。通過SASS構(gòu)建應(yīng)用程序赫模,它提供了很多UI組件來幫助開發(fā)者開發(fā)強(qiáng)大的應(yīng)用树肃。它使用Javascript MVVM框架和AngularJS/Vue來增強(qiáng)應(yīng)用。提供數(shù)據(jù)的雙向綁定瀑罗,使用它成為Web和移動(dòng)開發(fā)者的共同選擇胸嘴。
官網(wǎng)地址:https://ionicframework.com/
官網(wǎng)文檔:https://ionicframework.com/docs/
Github:https://github.com/ionic-team/ionic
mpvue
mpvue 是美團(tuán)開發(fā)的一個(gè)使用Vue.js開發(fā)小程序的前端框架,目前支持微信小程序斩祭、百度智能小程序劣像,頭條小程序和支付寶小程序。 框架基于Vue.js摧玫,修改了的運(yùn)行時(shí)框架runtime 和代碼編譯器compiler實(shí)現(xiàn)耳奕,使其可運(yùn)行在小程序環(huán)境中,從而為小程序開發(fā)引入了Vue.js開發(fā)體驗(yàn)。
官網(wǎng)地址:http://mpvue.com/
Github:https://github.com/Meituan-Dianping/mpvue
備注:完備的Vue開發(fā)體驗(yàn)屋群,并且支持多平臺(tái)的小程序開發(fā),推薦使用。
WeUI
WeUI是一套同微信原生視覺體驗(yàn)一致的基礎(chǔ)樣式庫遭商,由微信官方設(shè)計(jì)團(tuán)隊(duì)為微信內(nèi)網(wǎng)頁和微信小程序量身設(shè)計(jì)宪巨,令用戶的使用感知更加統(tǒng)一。包含 button纸肉、cell溺欧、dialog、toast柏肪、article姐刁、icon 等各式元素。
官網(wǎng)地址:https://weui.io/
Github:https://github.com/weui/weui.git
注:以上知識(shí)點(diǎn)已將 WebApp 開發(fā)所需技能全部梳理完畢烦味。
前后端分離的演變史
后端為主的MVC時(shí)代
為了降低開發(fā)的復(fù)雜度聂使,以后端為出發(fā)點(diǎn),比如:Struts谬俄、SpringMVC 等框架的使用柏靶,就是后端的 MVC時(shí)代。
以SpringMVC流程為例溃论,其運(yùn)行流程如下圖所示屎蜓。
- 用戶發(fā)送請(qǐng)求到前端控制器
DispatcherServlet
。 - 前端控制器請(qǐng)求
HandlerMapping
查找Handler
钥勋,可以根據(jù)xml
配置炬转、注解進(jìn)行查找。 - 處理器映射器
HandlerMapping
向前端控制器返回Handler
算灸。 - 前端控制器調(diào)用處理器適配器去執(zhí)行
Handler
扼劈。 - 處理器適配器去執(zhí)行
Handler
。 -
Handler
執(zhí)行完成給適配器返回ModelAndView
菲驴。 - 處理器適配器向前端控制器返回
ModelAndView
荐吵,ModelAndView
是SpringMVC框架的一個(gè)底層對(duì)象,包括Model和View赊瞬。 - 前端控制器請(qǐng)求視圖解析器去對(duì)視圖進(jìn)行解析先煎,根據(jù)邏輯視圖名解析成真正的視圖(
JSP
)。 - 視圖解析器向前端控制器返回
View
巧涧。 - 前端控制器進(jìn)行視圖渲染榨婆,視圖渲染將模型數(shù)據(jù)(在
ModelAndView
對(duì)象中)填充到request
域。 - 前端控制器向用戶響應(yīng)結(jié)果褒侧。
優(yōu)點(diǎn)
MVC 是一個(gè)非常好的協(xié)作模式良风,能夠有效降低代碼的耦合度谊迄,從架構(gòu)上能夠讓開發(fā)者明白代碼應(yīng)該寫在哪里。為了讓 View 更純粹烟央,還可以使用 Thymeleaf统诺、Freemarker 等模板引擎,使模板里無法寫入Java代碼疑俭,讓前后端分工更加清晰粮呢。
缺點(diǎn)
- 前端開發(fā)重度依賴開發(fā)環(huán)境,開發(fā)效率低
這種架構(gòu)下钞艇,前后端協(xié)作有兩種模式:
1啄寡、第一種是前端寫DEMO,寫好后哩照,讓后端去套模板挺物。好處是DEMO可以本地開發(fā),很高效飘弧。不足是還需要后端套模板识藤,有可能套錯(cuò),套完后還需要前端確定次伶,來回溝通調(diào)整的成本比較大痴昧。
2、另一種協(xié)作模式是前端負(fù)責(zé)瀏覽器端的所有開發(fā)和服務(wù)器端的View 層模板開發(fā)冠王。好處是 UI 相關(guān)的代碼都是前端去寫就好赶撰,后端不用太關(guān)注,不足就是前端開發(fā)重度綁定后端環(huán)境柱彻,環(huán)境成為影響前端開發(fā)效率的重要因素豪娜。 - 前后端職責(zé)糾纏不清
模板引擎功能強(qiáng)大,依舊可以通過拿到的上下文變量來實(shí)現(xiàn)各種業(yè)務(wù)邏輯绒疗。這樣侵歇,只要前端弱勢(shì)一點(diǎn)骂澄,往往就會(huì)被后端要求在模板層寫出不少業(yè)務(wù)代碼吓蘑。還有一個(gè)很大的灰色地帶是Controller ,頁面路由等功能本應(yīng)該是前端最關(guān)注的坟冲,但卻是由后端來實(shí)現(xiàn)磨镶。 Controller 本身與 Model 往往也會(huì)糾纏不清,業(yè)務(wù)代碼經(jīng)常會(huì)出現(xiàn)在 Controller 層健提。 - 對(duì)前端發(fā)揮的局限性
性能優(yōu)化如果只在前端做空間非常有限琳猫,于是我們經(jīng)常需要和后端合作。
注:在這期間(2005 年以前)私痹,包括早期的 JSP脐嫂、PHP 可以稱之為 Web 1.0 時(shí)代统刮。
基于Ajax帶來的SPA時(shí)代
2005年Ajax(Asynchronous JavaScript And XML,異步 JavaScript 和 XML账千,老技術(shù)新用法)被正式提出并開始使用 CDN 作為靜態(tài)資源存儲(chǔ)侥蒙,于是出現(xiàn)了JavaScript 王者歸來(在這之前JS 都是用來在網(wǎng)頁上貼狗皮膏藥廣告的)的 SPA(Single Page Application)單頁面應(yīng)用時(shí)代。
Ajax的運(yùn)行原理如下圖所示匀奏。
優(yōu)點(diǎn)
這種模式下鞭衩,前后端的分工非常清晰,前后端的關(guān)鍵協(xié)作點(diǎn)是 Ajax接口娃善÷垩埽看起來是如此美妙,但回過頭來看看的話聚磺,這與 JSP 時(shí)代區(qū)別不大坯台。復(fù)雜度從服務(wù)端的JSP里移到了瀏覽器的 Javascript,瀏覽器端變得很復(fù)雜咧最。類似 Spring MVC捂人,這個(gè)時(shí)代開始出現(xiàn)瀏覽器端的分層架構(gòu),其架構(gòu)如下圖所示矢沿。
缺點(diǎn)
- 前后端接口的約定
如果后端的接口一塌糊涂或者業(yè)務(wù)模型不夠穩(wěn)定滥搭,那么前端開發(fā)會(huì)很痛苦。不少團(tuán)隊(duì)也有類似嘗試捣鲸,通過接口規(guī)則瑟匆、接口平臺(tái)等方式來做。有了和后端一起沉淀的接口規(guī)則栽惶,還可以用來模擬數(shù)據(jù)愁溜,使得前后端可以在約定接口后實(shí)現(xiàn)高效并行開發(fā)。 - 前端開發(fā)的復(fù)雜度控制
SPA 應(yīng)用大多以功能交互型為主外厂,JavaScript 代碼過十萬行很正常冕象。大量JS 代碼的組織,與 View 層的綁定等汁蝶,都比較復(fù)雜渐扮。
前端為主的MV*時(shí)代
這里的MV*模式主要指的是以下三種模式:
- MVC(同步通信為主):Model、View掖棉、Controller
- MVP(異步通信為主):Model墓律、View、Presenter
- MVVM(異步通信為主):Model幔亥、View耻讽、ViewModel
為了降低前端開發(fā)復(fù)雜度,涌現(xiàn)了大量的前端框架帕棉,比如: AngularJS 针肥、 React 饼记、 Vue.js 、 EmberJS 等慰枕,這些框架總的原則是先按類型分層握恳,比如 Templates、Controllers捺僻、Models乡洼,然后再在層內(nèi)做切分,如下圖所示匕坯。
優(yōu)點(diǎn)
- 前后端職責(zé)很清晰
前端工作在瀏覽器端束昵,后端工作在服務(wù)端。清晰的分工葛峻,可以讓開發(fā)并行锹雏,測(cè)試數(shù)據(jù)的模擬不難。前端可以本地開發(fā)术奖,后端則可以專注于業(yè)務(wù)邏輯的處理礁遵,輸出 RESTful等接口。 - 前端開發(fā)的復(fù)雜度可控
前端代碼很重采记,但合理的分層佣耐,讓前后端代碼能各司其職。 - 部署相對(duì)獨(dú)立
可以快速改進(jìn)產(chǎn)品體驗(yàn)唧龄。
缺點(diǎn)
- 代碼不能復(fù)用兼砖。比如后端依舊需要對(duì)數(shù)據(jù)做各種校驗(yàn),校驗(yàn)邏輯無法復(fù)用瀏覽器端的代碼既棺。
- 全異步讽挟,對(duì) SEO 不利。往往還需要服務(wù)端做同步渲染的降級(jí)方案丸冕。
- 性能并非最佳耽梅,特別是移動(dòng)互聯(lián)網(wǎng)環(huán)境下。
- SPA 不能滿足所有需求胖烛,依舊存在大量多頁面應(yīng)用眼姐。URL Design 需要后端配合,前端無法完全掌控洪己。
Node.js帶來的全棧時(shí)代
前端為主的 MV* 模式解決了很多很多問題妥凳,但如上所述竟贯,依舊存在不少不足之處答捕。隨著 Node.js 的興起,Javascript 開始有能力運(yùn)行在服務(wù)端屑那,這意味著可以有一種新的研發(fā)模式拱镐,如下圖所示艘款。
在這種研發(fā)模式下,前后端的職責(zé)很清晰沃琅。對(duì)前端來說哗咆,兩個(gè) UI 層各司其職:
- Front-end UI layer處理瀏覽器層的展現(xiàn)邏輯。通過 CSS 渲染樣式益眉,通過Javascript 添加交互功能晌柬,HTML 的生成也可以放在這層,依據(jù)應(yīng)用場(chǎng)景而定郭脂。
- Back-end UI layer處理路由年碘、模板、數(shù)據(jù)獲取展鸡、Cookie 等屿衅。通過路由,前端終于可以自主把控URL Design莹弊,這樣無論是單頁面應(yīng)用還是多頁面應(yīng)用涤久,前端都可以自由調(diào)控。后端也終于可以擺脫對(duì)展現(xiàn)的強(qiáng)關(guān)注忍弛,轉(zhuǎn)而可以專心于業(yè)務(wù)邏輯層的開發(fā)响迂。
通過 Node.js,Web Server 層也是 Javascript 代碼细疚,這意味著部分代碼可前后復(fù)用栓拜,需要 SEO 的場(chǎng)景可以在服務(wù)端同步渲染,由于異步請(qǐng)求太多導(dǎo)致的性能問題也可以通過服務(wù)端來緩解惠昔。前一種模式的不足幕与,通過這種模式也能完美解決。
與 JSP 模式相比镇防,全棧模式是一種向原始開發(fā)模式的回歸啦鸣,不過是一種螺旋上升式的回歸。
基于 NodeJS 的全棧模式来氧,依舊面臨很多挑戰(zhàn):
- 需要前端對(duì)服務(wù)端編程有更進(jìn)一步的認(rèn)識(shí)诫给。比如 TCP/IP 等網(wǎng)絡(luò)知識(shí)的掌握。
- NodeJS 層與 Java 層的高效通信啦扬。Node.js模式下中狂,都在服務(wù)器端,RESTful HTTP 通信未必高效扑毡,通過 SOAP 等方式通信更高效胃榕。一切需要在驗(yàn)證中前行。
- 對(duì)部署瞄摊、運(yùn)維層面的熟練了解勋又,需要更多知識(shí)點(diǎn)和實(shí)操經(jīng)驗(yàn)苦掘。
- 大量歷史遺留問題如何過渡?這可能是最大最大的阻力楔壤。
小結(jié)
綜上所述鹤啡,不管是模式還是技術(shù),沒有好壞優(yōu)劣之分蹲嚣,只有適合不適合递瑰。前后分離的開發(fā)思想主要是基于 SoC (關(guān)注度分離原則),以上提到的種種模式隙畜,都是為了讓前后端的職責(zé)更清晰泣矛,分工更合理高效。