互聯(lián)網(wǎng)架構(gòu)設(shè)計(jì):高性能的前端

當(dāng)我們討論互聯(lián)網(wǎng)產(chǎn)品高性能架構(gòu)的時(shí)候拍冠,往往聚焦在高性能的后端服務(wù)贴妻。其實(shí)用戶是通過客戶端前端來直接體驗(yàn)互聯(lián)網(wǎng)產(chǎn)品的涧团,前端高性能設(shè)計(jì)也是很重要的只磷。用戶使用互聯(lián)網(wǎng)產(chǎn)品的基本流程如下圖。用戶使用電腦Web瀏覽器或者手機(jī)App來直接使用互聯(lián)網(wǎng)產(chǎn)品服務(wù)泌绣,用戶終端將會(huì)把用戶的操作行為請(qǐng)求到網(wǎng)站服務(wù)器钮追,網(wǎng)站服務(wù)器對(duì)請(qǐng)求進(jìn)行響應(yīng),用戶終端(Web瀏覽器或者手機(jī)App)將解析服務(wù)器的響應(yīng)進(jìn)行解析阿迈,通過屏幕或聲音反饋給用戶元媚。

從圖中可以看出用戶直接的體驗(yàn)是通過前端反饋出來的。當(dāng)用戶使用不同互聯(lián)網(wǎng)產(chǎn)品時(shí)苗沧,都會(huì)有不同的體驗(yàn)感覺刊棕,某些客戶端或網(wǎng)頁使用起來很快,點(diǎn)擊請(qǐng)求立即就能有響應(yīng)待逞,某些客戶端或網(wǎng)頁使用起來很慢甥角,點(diǎn)擊某個(gè)按鈕半天沒有響應(yīng),還可以出現(xiàn)客戶端崩潰识樱,最后卸載App或者關(guān)閉網(wǎng)頁嗤无。

今天我們主要來講述一下,互聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)高性能高并發(fā)的一些常用方法和策略怜庸。當(dāng)然優(yōu)秀的互聯(lián)網(wǎng)產(chǎn)品架構(gòu)設(shè)計(jì)從來都是在實(shí)踐過程中不斷優(yōu)化迭代出來的当犯,一開始就企圖就想設(shè)計(jì)一個(gè)包羅萬象的牛逼架構(gòu)做法是行不通的。在互聯(lián)網(wǎng)產(chǎn)品發(fā)展過程中休雌,每個(gè)不同階段的瓶頸指標(biāo)點(diǎn)是不一樣的灶壶,所以優(yōu)秀的架構(gòu)都是不斷迭代優(yōu)化的歷史產(chǎn)物。

一個(gè)優(yōu)秀的產(chǎn)品杈曲,不僅需要在產(chǎn)品交互和客戶端層面做好驰凛,同時(shí)需要在網(wǎng)絡(luò)后端服務(wù)也做到優(yōu)秀,前后端緊密配合才能極大地提升用戶體驗(yàn)担扑。對(duì)于互聯(lián)網(wǎng)產(chǎn)品的高性能架構(gòu)設(shè)計(jì)通常包括以下幾個(gè)大方面:

1)Web瀏覽器高性能設(shè)計(jì)

2)App客戶端高性能設(shè)計(jì)

3)高性能的網(wǎng)絡(luò)和硬件

4)后臺(tái)服務(wù)高性能設(shè)計(jì)

對(duì)于一般的互聯(lián)網(wǎng)產(chǎn)品不需要將以上四個(gè)方面做到盡善盡美恰响,可以依據(jù)自身的發(fā)展階段選取某些方面進(jìn)行優(yōu)先解決和提升。比如一般的創(chuàng)業(yè)公司可能不太需要去關(guān)心網(wǎng)絡(luò)和硬件相關(guān)的事情涌献,因?yàn)槟壳暗尿v訊云或阿里云可以幫助做好這些事情胚宦。

下面我們先來具體介紹前面兩個(gè)方面。

1、Web瀏覽器高性能設(shè)計(jì)

隨著互聯(lián)網(wǎng)瀏覽器的發(fā)展枢劝,現(xiàn)在Web的功能越來越強(qiáng)大井联,所展現(xiàn)的元素越來越豐富,直接導(dǎo)致瀏覽器與后臺(tái)服務(wù)器的連接數(shù)大幅增長(zhǎng)您旁,網(wǎng)絡(luò)傳輸?shù)牧髁吭絹碓酱罄映!eb瀏覽器高性能設(shè)計(jì)方法主要有以下幾點(diǎn):

1)盡量與后臺(tái)服務(wù)器建立長(zhǎng)連接。長(zhǎng)連接的方式可以避免web端和服務(wù)器反復(fù)建立和銷毀連接鹤盒,占用大量客戶端資源蚕脏,同時(shí)也會(huì)給服務(wù)器造成一定的壓力。

2)本地緩存數(shù)據(jù)侦锯,提升訪問效率驼鞭。對(duì)于一些不經(jīng)常更改的圖片和js/css文件可以通過緩存在本地,通過版本號(hào)和hash值來協(xié)商緩存的更新尺碰,從而達(dá)到更快速訪問的用戶體驗(yàn)挣棕。

3)合并頁面請(qǐng)求,達(dá)到減少頁面請(qǐng)求葱蝗,提升網(wǎng)絡(luò)效率的目的穴张。比如多張小圖可以合并為一張圖片來請(qǐng)求细燎,一次預(yù)請(qǐng)求多一點(diǎn)的數(shù)據(jù)两曼。

4)頁面靜態(tài)化處理。對(duì)于某些不經(jīng)常變更的頁面(如新聞玻驻、日志等)可以通過靜態(tài)頁面訪問的方式來請(qǐng)求悼凑,方便后臺(tái)進(jìn)行CDN和緩存。

5)將靜態(tài)請(qǐng)求和動(dòng)態(tài)請(qǐng)求進(jìn)行適當(dāng)?shù)姆蛛x璧瞬。比如圖片從http://img.xxx.com服務(wù)器去拉取户辫,而動(dòng)態(tài)的用戶請(qǐng)求從http://www.xxx.com進(jìn)行拉取。

6)web端異步請(qǐng)求嗤锉。如通過ajax異步化和局部化的操作方式渔欢,減少一些不必要的請(qǐng)求開銷,同時(shí)加快前端處理速度瘟忱。

7)優(yōu)化業(yè)務(wù)處理邏輯奥额。比如對(duì)于數(shù)據(jù)量比較大的頁面列表,需要進(jìn)行分頁請(qǐng)求访诱,數(shù)據(jù)量限制等垫挨。對(duì)于12306網(wǎng)站業(yè)務(wù)處理邏輯優(yōu)化的一個(gè)重點(diǎn)就在于分時(shí)段開售火車票,以往是大量請(qǐng)求在同一時(shí)間搶票触菜,這是一個(gè)業(yè)務(wù)邏輯處理的錯(cuò)誤九榔,不同的列車就可以通過不同的時(shí)間段來售賣,這樣可以分散到請(qǐng)求壓力。

8)減少cookie傳輸哲泊。cookie在每次請(qǐng)求和響應(yīng)中都會(huì)得到傳輸剩蟀,臨時(shí)和不必要的cookie會(huì)使得請(qǐng)求數(shù)據(jù)量增加。

2切威、App客戶端高性能設(shè)計(jì)

對(duì)于開發(fā)者來說喻旷,App客戶端有更大的自主性,對(duì)優(yōu)化性能方面能做更多事情牢屋。來看看且预,從app端進(jìn)行高性能設(shè)計(jì)具體有哪些方法。

1)緩存技術(shù)烙无。app客戶端是作為操作系統(tǒng)的一個(gè)獨(dú)立進(jìn)程運(yùn)行的锋谐,相對(duì)Web端瀏覽器有更大的發(fā)揮空間。對(duì)于數(shù)據(jù)量比較大的資源截酷、圖片的緩存涮拗,可以充分利用內(nèi)存、本地磁盤和網(wǎng)絡(luò)存儲(chǔ)三個(gè)方面來進(jìn)行緩存迂苛,可以在客戶端上建立一套緩存機(jī)制三热,采用LRU或LFU調(diào)度方式管理緩存,用于支撐app更高效的運(yùn)行三幻。比如圖片的存儲(chǔ)就漾,可以先從內(nèi)存中讀取,如果內(nèi)存沒有可以從磁盤上讀取念搬,如果再?zèng)]有再通過網(wǎng)絡(luò)請(qǐng)求讀取抑堡。

2)資源預(yù)加載±驶玻基于業(yè)務(wù)邏輯首妖、用戶歷史行為和安全機(jī)制對(duì)于用戶行為進(jìn)行一定預(yù)測(cè),在用戶未請(qǐng)求前就預(yù)先加載一部分資源爷恳。比如目前社交類app應(yīng)用下拉時(shí)預(yù)加載部分?jǐn)?shù)據(jù)有缆。

3)建立長(zhǎng)連接,適當(dāng)壓縮數(shù)據(jù)温亲,減少資源的浪費(fèi)棚壁。

4)路由計(jì)劃表。針對(duì)用戶的歷史連接行為铸豁,后臺(tái)接入服務(wù)的控制策略灌曙,制定一份接入站點(diǎn)的路由計(jì)劃表,為用戶選擇最優(yōu)的接入站點(diǎn)节芥。對(duì)于一般的用戶在刺,他們的網(wǎng)絡(luò)環(huán)境的切換會(huì)相對(duì)的固定逆害,那么對(duì)于某一個(gè)確定的用戶大部分時(shí)間來說,客戶端是知道連接到哪里是最快的蚣驼。

5)請(qǐng)求異步化魄幕。app客戶端可以通過多線程來異步化請(qǐng)求,提升app的請(qǐng)求吞吐量颖杏。

6)優(yōu)化業(yè)務(wù)邏輯纯陨,比如列表分頁、異步發(fā)布上傳留储,緩存讀取等翼抠。例如:你在發(fā)表朋友圈的時(shí)候,微信客戶端顯示發(fā)布成功获讳,其實(shí)在后臺(tái)不一定是發(fā)布成功了阴颖,而是寫入到本地成功了,后續(xù)再通過異步發(fā)送到后臺(tái)服務(wù)器的丐膝。

本篇文章主要從前端介紹了高性能架構(gòu)的設(shè)計(jì)方法量愧,供開發(fā)程序員朋友在優(yōu)化演進(jìn)自己的產(chǎn)品時(shí)參考。但是后端服務(wù)的高性能在互聯(lián)網(wǎng)產(chǎn)品架構(gòu)設(shè)計(jì)中占有更大的比重帅矗。這一部分會(huì)將會(huì)在下期文章中得到闡述偎肃。

轉(zhuǎn)自原文:https://zhuanlan.zhihu.com/p/28340003

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浑此,隨后出現(xiàn)的幾起案子累颂,更是在濱河造成了極大的恐慌,老刑警劉巖尤勋,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喘落,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡最冰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門稀火,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暖哨,“玉大人,你說我怎么就攤上這事凰狞∑茫” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵赡若,是天一觀的道長(zhǎng)达布。 經(jīng)常有香客問我,道長(zhǎng)逾冬,這世上最難降的妖魔是什么黍聂? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任躺苦,我火速辦了婚禮,結(jié)果婚禮上产还,老公的妹妹穿的比我還像新娘匹厘。我一直安慰自己,他們只是感情好脐区,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布愈诚。 她就那樣靜靜地躺著,像睡著了一般牛隅。 火紅的嫁衣襯著肌膚如雪炕柔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天媒佣,我揣著相機(jī)與錄音汗唱,去河邊找鬼。 笑死丈攒,一個(gè)胖子當(dāng)著我的面吹牛哩罪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巡验,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼际插,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了显设?” 一聲冷哼從身側(cè)響起框弛,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捕捂,沒想到半個(gè)月后瑟枫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡指攒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年慷妙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片允悦。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膝擂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隙弛,到底是詐尸還是另有隱情架馋,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布全闷,位于F島的核電站叉寂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏总珠。R本人自食惡果不足惜屏鳍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一勘纯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孕蝉,春花似錦屡律、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佳鳖,卻和暖如春霍殴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背系吩。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工来庭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穿挨。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓月弛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親科盛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帽衙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,156評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)贞绵,斷路器厉萝,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 先簡(jiǎn)略回顧一下。對(duì)于互聯(lián)網(wǎng)產(chǎn)品的高性能架構(gòu)設(shè)計(jì)通常包括以下幾個(gè)大方面: 1)Web瀏覽器高性能設(shè)計(jì) 2)App客戶...
    言射手閱讀 1,536評(píng)論 0 6
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫榨崩、插件谴垫、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 56天沒聯(lián)系過了,她說不可能母蛛。怕我打擾到她的生活翩剪。。溯祸。 自己一個(gè)人偷偷的跑到她的城市肢专,去了幾次都是遠(yuǎn)遠(yuǎn)的看她,遠(yuǎn)遠(yuǎn)...
    雨天是放聲哭泣的時(shí)候閱讀 682評(píng)論 1 1