前端框架思路探討

前后端的技術(shù)已經(jīng)發(fā)展了很多年了耐齐,但是我們有很多問題或者很多思考的高度依舊是在圍繞工程打轉(zhuǎn)笤成,比如實(shí)現(xiàn)某個(gè)效果的頁(yè)面羡蛾。我嘗試站在時(shí)間的長(zhǎng)河邊漓帅,去思考一下前端和后端技術(shù)發(fā)展的方向問題,并給出一些未來前端的發(fā)展方向。

一忙干、網(wǎng)站發(fā)展簡(jiǎn)史及語(yǔ)言職責(zé)
讓我們回顧一下網(wǎng)站開發(fā)的一些歷史:

  1. 靜態(tài)網(wǎng)頁(yè) (html)
  2. 動(dòng)態(tài)網(wǎng)頁(yè)(php, jsp)
  3. 前端技術(shù)產(chǎn)生(applet, javascript)

從上面這段歷史屯伞,我們能看整個(gè)網(wǎng)站的開發(fā)核心是html,后端和前端技術(shù)均是為了豐富html而逐步發(fā)展起來的豪直。下面我們來看看各種web相關(guān)的語(yǔ)言所負(fù)責(zé)的職責(zé):

名稱 職責(zé) 備注
html 負(fù)責(zé)web頁(yè)面的結(jié)構(gòu) 因?yàn)樵撛颍?lt;font>,<color>等標(biāo)簽逐步退出歷史舞臺(tái)
css 負(fù)責(zé)web頁(yè)面的樣式
js 負(fù)責(zé)web頁(yè)面的交互
后端(java,php,node等) 負(fù)責(zé)頁(yè)面的數(shù)據(jù)

從這個(gè)職責(zé)表中,我們可以看出每種語(yǔ)言各司其職珠移,整個(gè)系統(tǒng)運(yùn)轉(zhuǎn)很完美弓乙。但是細(xì)究?jī)?nèi)容,我們會(huì)發(fā)現(xiàn)有一件事件是在前后端發(fā)展史上一直爭(zhēng)斗不休的問題钧惧,是一個(gè)繞不過去的問題: data -> html暇韧,一般我們也稱之為渲染。渲染問題是一個(gè)較復(fù)雜的問題浓瞪,而且涉及到整個(gè)web中的各種語(yǔ)言懈玻,是矛盾的集中產(chǎn)生地,針對(duì)渲染的問題乾颁,目前有三種解決方案:

方案 代表技術(shù) 描述 優(yōu)點(diǎn) 缺點(diǎn)
后端負(fù)責(zé)渲染 php, jsp等 由后端將數(shù)據(jù)等生成html涂乌,js僅負(fù)責(zé)頁(yè)面交互 1.技術(shù)成熟2.邏輯簡(jiǎn)單,數(shù)據(jù)直接通過內(nèi)存?zhèn)鬟f3.利于爬蟲 1.前端需要了解后端語(yǔ)言英岭,對(duì)前端極不友好2.代碼耦合緊密湾盒,不易維護(hù)3.消耗服務(wù)器資源
第三方負(fù)責(zé)渲染 smarty, twig等 在后端與前端之間引入第三方模板系統(tǒng),來解決渲染問題 1. 前后端解耦 2.對(duì)爬蟲友好3.邏輯簡(jiǎn)單 1.前后端都需要再學(xué)習(xí)一門模板語(yǔ)言2.消耗服務(wù)器資源
前端負(fù)責(zé)渲染 vue, react,angular等 后端所有的數(shù)據(jù)都通過接口來傳遞诅妹,js拿到數(shù)據(jù)后負(fù)責(zé)渲染罚勾,將數(shù)據(jù)生成為html 1.前后端開發(fā)簡(jiǎn)單 2.服務(wù)器壓力降低3.代碼拆分,解耦 1.對(duì)爬蟲不友好 2.數(shù)據(jù)傳遞很復(fù)雜3.技術(shù)不成熟4.渲染成為前端開發(fā)的主要矛盾

此處吭狡,我無(wú)意討論哪種方式好或者哪種不好尖殃。各種模式均有其適用的場(chǎng)景和環(huán)境,因此划煮,我們可以根據(jù)實(shí)際情況來選擇送丰。但本質(zhì)上我還是想說的事情是:渲染是前后端模式中的一個(gè)核心問題:既然html代表頁(yè)面的結(jié)構(gòu),那么頁(yè)面結(jié)構(gòu)到底是由data決定還是由樣式和交互來決定般此?

二蚪战、vue等框架的核心問題

2.1 前端框架發(fā)展歷程
下面,我們來看看前端框架的發(fā)展歷程

  • javascript 原生js
  • 工具集:jquery
  • mvc框架: BackboneJs, EmberJs等
  • mvvm框架:vue等

2.2 框架設(shè)計(jì)的思路
正愁戆茫框架設(shè)計(jì)時(shí)應(yīng)該是針對(duì)某一類問題邀桑,找到這類問題的主線,通過各種設(shè)計(jì)模式和代碼復(fù)用科乎,解決主線壁畸;當(dāng)我們解決了主線時(shí),之前的支線會(huì)成為主要矛盾,然后重復(fù)上述過程捏萍。
那么太抓,我們來看一下,早期前端開發(fā)的主要矛盾:

1令杈、jquery時(shí)代走敌。
頁(yè)面由后端渲染生成,js的主要的開發(fā)問題為: 給dom/頁(yè)面加上偵聽事件逗噩,等待事件發(fā)生掉丽,處理事件(主要有ajax, dom操作等)。

2异雁、 vue捶障。

  • 整個(gè)頁(yè)面在第一次請(qǐng)求后,被vue接管纲刀。
  • vue根據(jù)url或用戶操作项炼,獲取數(shù)據(jù),渲染為html示绊。
  • vue加上偵聽事件锭部,等待事件發(fā)生,處理事件面褐。

所以空免,我們從vue可以看出,vue極大地解決了之前jquery時(shí)代中所遇見的dom操作盆耽,事件綁定的問題蹋砚,使得vue比jquery在處理此類事件時(shí),要便利很多摄杂。但是與此同時(shí)坝咐,也給前端帶來了新的工作——渲染。

渲染這項(xiàng)工作是極為復(fù)雜的析恢,后端曾經(jīng)花了極大的精力來解決該問題墨坚。但是,當(dāng)渲染被前端接手后映挂,前端并沒有認(rèn)真去考慮如何來解決該問題泽篮,它逐步變成一個(gè)大麻煩,在不斷侵蝕前端工程師的美好年華柑船。

三帽撑、渲染的解決之道
3.1 后端框架的一般過程

后端框架一般過程

  • 用戶通過瀏覽器發(fā)送請(qǐng)求給服務(wù)器
  • 服務(wù)器會(huì)將請(qǐng)求通過路由分發(fā)到某一個(gè)controller/Action。
  • Controller/Atcion通過Model從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)鞍时。
  • 通過View來渲染數(shù)據(jù)亏拉。
  • 最后Controller/Action將渲染后的數(shù)據(jù)返回給用戶

3.2 前端渲染時(shí)的邏輯結(jié)構(gòu)
有vue之后扣蜻,我們來看一下整體的邏輯結(jié)構(gòu)圖:


vue邏輯結(jié)構(gòu)
  • 用戶先獲取帶有vuejs的基本頁(yè)面,整個(gè)頁(yè)面被vue接管.
  • 用戶的操作被controller接管
  • controller通過http等獲取數(shù)據(jù)
  • 通過view來渲染數(shù)據(jù)及塘,最終呈現(xiàn)給用戶莽使。
  • controller保持偵聽事件,等待特定事件發(fā)生笙僚。

我們可以看見芳肌,與后端渲染時(shí),基本是同一個(gè)圖形肋层,唯一的不同就是把數(shù)據(jù)庫(kù)連接換成http連接庇勃,而vue是沒有Model的。

vue框架是有controller, viewModel(data)槽驶,view的,但是vue框架少了最重要的一層Model層鸳兽,而Model層正是整個(gè)系統(tǒng)中的業(yè)務(wù)邏輯聚集地掂铐,導(dǎo)致我們不得不把業(yè)務(wù)邏輯散亂地放置于Controller中。雖然vuex能部分地解決問題揍异,但是并沒有從根源上來解決全陨。因此,要解決渲染的問題衷掷,Model層或者說數(shù)據(jù)層是極為重要的一層辱姨。

具體的解決方法和實(shí)現(xiàn)下一次再討論。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戚嗅,一起剝皮案震驚了整個(gè)濱河市雨涛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懦胞,老刑警劉巖替久,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異躏尉,居然都是意外死亡蚯根,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門胀糜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颅拦,“玉大人,你說我怎么就攤上這事教藻【嗨В” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵括堤,是天一觀的道長(zhǎng)锥债。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么哮肚? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任登夫,我火速辦了婚禮,結(jié)果婚禮上允趟,老公的妹妹穿的比我還像新娘恼策。我一直安慰自己,他們只是感情好潮剪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布涣楷。 她就那樣靜靜地躺著,像睡著了一般抗碰。 火紅的嫁衣襯著肌膚如雪狮斗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天弧蝇,我揣著相機(jī)與錄音碳褒,去河邊找鬼。 笑死看疗,一個(gè)胖子當(dāng)著我的面吹牛沙峻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播两芳,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼摔寨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了怖辆?” 一聲冷哼從身側(cè)響起是复,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竖螃,沒想到半個(gè)月后佑笋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斑鼻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蒋纬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坚弱。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜀备,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荒叶,到底是詐尸還是另有隱情碾阁,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布些楣,位于F島的核電站脂凶,受9級(jí)特大地震影響宪睹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚕钦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一亭病、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘶居,春花似錦罪帖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至佑吝,卻和暖如春坐昙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芋忿。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工炸客, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盗飒。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陋桂,于是被迫代替她去往敵國(guó)和親逆趣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • AngularJS是什么嗜历? AngularJs(簡(jiǎn)稱ng)是一個(gè)用于設(shè)計(jì)動(dòng)態(tài)web應(yīng)用的結(jié)構(gòu)框架宣渗。首先,它是一個(gè)框...
    強(qiáng)哥科技興閱讀 1,253評(píng)論 0 1
  • 一:什么是閉包梨州?閉包的用處痕囱? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在本質(zhì)上暴匠,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 9,543評(píng)論 1 52
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 一 目錄二 前言三 發(fā)展歷史 3.1 原始社會(huì) 3.2 石器時(shí)代 3.3 鐵器時(shí)代 3.4 工業(yè)時(shí)代 四 技術(shù)比較...
    取個(gè)名字還真濫閱讀 1,255評(píng)論 0 1
  • 分頁(yè)功能最主要的就是分頁(yè)頁(yè)碼的生成,示例如下 <?php /** * @params $totalpage ...
    一句話兒閱讀 278評(píng)論 1 0