Web 進(jìn)化

傳統(tǒng)后臺(tái)架構(gòu)

上古時(shí)代

上古時(shí)代
<!DOCTYPE html>
<html>
<body>

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<div> id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "</div>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>

</body>
</html>

這種模式非常適合創(chuàng)業(yè)型小項(xiàng)目挨下,不分前后端,經(jīng)常 3-5 人搞定所有開(kāi)發(fā)下面。頁(yè)面由 JSP、PHP 等工程師在服務(wù)端生成绩聘,瀏覽器負(fù)責(zé)展現(xiàn)沥割。基本上是服務(wù)端給什么瀏覽器就展現(xiàn)什么凿菩,展現(xiàn)的控制在Server 層机杜。

后端MVC時(shí)代

e2.png

為了降低復(fù)雜度,以后端為出發(fā)點(diǎn)衅谷,有了 Web Server 層的架構(gòu)升級(jí)椒拗,比如 thinkPHP 、Laravel获黔、 Spring MVC 等蚀苛。

Ajax時(shí)代

e3.png

XMLHttpRequest異步調(diào)用服務(wù)器端來(lái)獲取數(shù)據(jù),并將數(shù)據(jù)應(yīng)用在客戶端玷氏,實(shí)現(xiàn)了無(wú)刷新的效果堵未,這使得Google Maps依賴(lài)其極好的用戶體驗(yàn)獲取了巨大的成功,Ajax這個(gè)概念開(kāi)始火爆盏触,SPA (Single Page Application 單頁(yè)面應(yīng)用)時(shí)代就開(kāi)始了渗蟹。

前端 MV* 時(shí)代

e4.png

為了降低前端開(kāi)發(fā)復(fù)雜度,除了 Backbone赞辩,還有大量框架涌現(xiàn)雌芽,比如 EmberJS、KnockoutJS辨嗽、AngularJS世落、Vue、React等等糟需。

好處很明顯:
1岛心、前后端職責(zé)很清晰。前端工作在瀏覽器端篮灼,后端工作在服務(wù)端忘古。清晰的分工,可以讓開(kāi)發(fā)并行诅诱,測(cè)試數(shù)據(jù)的模擬不難髓堪,前端可以本地開(kāi)發(fā)。后端則可以專(zhuān)注于業(yè)務(wù)邏輯的處理,輸出 RESTful 等接口干旁。
2驶沼、前端開(kāi)發(fā)的復(fù)雜度可控。前端代碼很重争群,但合理的分層回怜,讓前端代碼能各司其職。這一塊蠻有意思的换薄,簡(jiǎn)單如模板特性的選擇玉雾,就有很多很多講究。并非越強(qiáng)大越好轻要,限制什么复旬,留下哪些自由,代碼應(yīng)該如何組織冲泥,所有這一切設(shè)計(jì)驹碍,得花一本的厚度去說(shuō)明。
3凡恍、部署相對(duì)獨(dú)立志秃,產(chǎn)品體驗(yàn)可以快速改進(jìn)。
但依舊有不足之處:
1嚼酝、代碼不能復(fù)用洽损。比如后端依舊需要對(duì)數(shù)據(jù)做各種校驗(yàn),校驗(yàn)邏輯無(wú)法復(fù)用瀏覽器端的代碼革半。如果可以復(fù)用碑定,那么后端的數(shù)據(jù)校驗(yàn)可以相對(duì)簡(jiǎn)單化。2又官、全異步延刘,對(duì) SEO 不利。往往還需要服務(wù)端做同步渲染的降級(jí)方案六敬。
3碘赖、性能并非最佳,特別是移動(dòng)互聯(lián)網(wǎng)環(huán)境下外构。
4普泡、SPA 不能滿足所有需求,依舊存在大量多頁(yè)面應(yīng)用审编。URL Design 需要后端配合撼班,前端無(wú)法完全掌控。

Node全棧&同構(gòu)

前端為主的 MV* 模式解決了很多很多問(wèn)題垒酬,但如上所述砰嘁,依舊存在不少不足之處件炉。隨著 Node.js 的興起,JavaScript 開(kāi)始有能力運(yùn)行在服務(wù)端矮湘。

React 同構(gòu)渲染


975d4efef933f05fc62a68d27e36e11a_r.png

Koa+React

有了服務(wù)端渲染的基礎(chǔ)斟冕,后端和前端的路由也可以做到統(tǒng)一。
同構(gòu)的實(shí)現(xiàn)彌補(bǔ)了前面提到的單純前端實(shí)現(xiàn)的SPA的提到前后端代碼復(fù)用缅阳,SEO磕蛇,URL Design這些問(wèn)題。

引入NodeJS實(shí)現(xiàn)前后端分離

51d06ddc3f781892df0a19a053c249bb5d0a4108.jpg
  • 為什么要前后端分離十办?

由于之前的Web基本上都是基于后端的MVC框架秀撇,架構(gòu)決定了前端只能依賴(lài)后端。前端寫(xiě)好靜態(tài)demo橘洞,然后根據(jù)分工前端或者后端改寫(xiě)成相應(yīng)的模版語(yǔ)言捌袜,比如 blade说搅,smarty等等炸枣。這種基于后端環(huán)境開(kāi)發(fā)是很痛苦和低效率的,后端沒(méi)法擺脫對(duì)展現(xiàn)的強(qiáng)關(guān)注弄唧,從而專(zhuān)心于業(yè)務(wù)邏輯層的開(kāi)發(fā)适肠,前端也吐槽后端亂改他們的代碼。所以加上一個(gè)nodejs中間層來(lái)分離候引。

  • 怎么做前后端分離侯养?

前端:負(fù)責(zé)視圖和交互層。
后端:負(fù)責(zé)Model層澄干,業(yè)務(wù)處理/數(shù)據(jù)等逛揩。

e6.png

掘金的架構(gòu)

  • leancloud

leancloud 是核心功能基于 Clojure 開(kāi)發(fā)的云端數(shù)據(jù)存儲(chǔ)解決方案,不同于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)麸俘,提供了標(biāo)準(zhǔn)的 REST API 和在其上封裝的各平臺(tái)的 SDK辩稽,數(shù)據(jù)對(duì)象以 JSON 格式隨存隨取,全平臺(tái)支持?jǐn)?shù)據(jù)增刪改查操作从媚。

  • 掘金前后端架構(gòu)
e5.png

掘金使用了Vue作為核心的前端框架逞泄,部署在leancloud云引擎的Nodejs服務(wù)器做為API服務(wù)器。Nodejs直接對(duì)接以json為數(shù)據(jù)模型的Leancloud拜效。

參考
https://github.com/lifesinger/blog/issues/184
http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/
https://zhuanlan.zhihu.com/p/20669111

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喷众,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子紧憾,更是在濱河造成了極大的恐慌到千,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赴穗,死亡現(xiàn)場(chǎng)離奇詭異父阻,居然都是意外死亡愈涩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)加矛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)履婉,“玉大人,你說(shuō)我怎么就攤上這事斟览』偻龋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵苛茂,是天一觀的道長(zhǎng)已烤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妓羊,這世上最難降的妖魔是什么胯究? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮躁绸,結(jié)果婚禮上裕循,老公的妹妹穿的比我還像新娘。我一直安慰自己净刮,他們只是感情好剥哑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著淹父,像睡著了一般株婴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暑认,一...
    開(kāi)封第一講書(shū)人閱讀 49,729評(píng)論 1 289
  • 那天困介,我揣著相機(jī)與錄音,去河邊找鬼蘸际。 笑死座哩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捡鱼。 我是一名探鬼主播八回,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驾诈!你這毒婦竟也來(lái)了缠诅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乍迄,失蹤者是張志新(化名)和其女友劉穎管引,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體闯两,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褥伴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年谅将,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片重慢。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饥臂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出似踱,到底是詐尸還是另有隱情隅熙,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布核芽,位于F島的核電站囚戚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轧简。R本人自食惡果不足惜驰坊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哮独。 院中可真熱鬧拳芙,春花似錦、人聲如沸借嗽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恶导。三九已至,卻和暖如春浸须,著一層夾襖步出監(jiān)牢的瞬間惨寿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工删窒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裂垦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓肌索,卻偏偏與公主長(zhǎng)得像蕉拢,于是被迫代替她去往敵國(guó)和親段审。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扣猫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

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