web開(kāi)發(fā)早期
在web開(kāi)發(fā)的早期時(shí)代(據(jù)史書(shū)記載赋元,那段不堪回首的歲月被稱之為web1.0時(shí)代
(╯▽╰)),開(kāi)發(fā)過(guò)程十分的簡(jiǎn)單明快,構(gòu)建web應(yīng)用的大致過(guò)程就是,瀏覽器向服務(wù)器端發(fā)送請(qǐng)求糊昙,然后由服務(wù)器端響應(yīng)請(qǐng)求并返回頁(yè)面內(nèi)容,基本可以概括為:朕(服務(wù)器)給你(瀏覽器)的是你的谢谦,朕不給你的你不能搶释牺。
這種模式下開(kāi)發(fā)者無(wú)需關(guān)心瀏覽器端發(fā)生了什么,通常5個(gè)人以內(nèi)回挽,不分前后端就可以close掉一個(gè)小項(xiàng)目没咙,當(dāng)然是在業(yè)務(wù)不太復(fù)雜的情況下。然而業(yè)務(wù)往往是會(huì)變復(fù)雜滴(個(gè)人感覺(jué)這和熵增原理存在著某些必然聯(lián)系(¬_¬))千劈,當(dāng)業(yè)務(wù)變得復(fù)雜時(shí)祭刚,很多開(kāi)心的事就會(huì)發(fā)僧了,Because往往業(yè)務(wù)一復(fù)雜墙牌,人就得多袁梗,人一多,花樣就多憔古,花樣一多,維護(hù)的成本就會(huì)變大...
還有一個(gè)就是用戶體驗(yàn)問(wèn)題淋袖,在這種模式下很難打造出極佳的用戶體驗(yàn)鸿市,因?yàn)闊o(wú)論用戶想做點(diǎn)什么,都需要向服務(wù)器發(fā)請(qǐng)求,并等待服務(wù)器端的響應(yīng)焰情,這會(huì)導(dǎo)致用戶失去在頁(yè)面上所積累的狀態(tài)陌凳。畢竟我們是服務(wù)行業(yè),服務(wù)行業(yè)的主旨是什么内舟?——客戶就是上帝合敦。上帝要是不開(kāi)心了,你還想不想吃小饅頭了验游。因此為了小饅頭充岛,,耕蝉,Σ( ° △ °|||)︴崔梗,,垒在,啊呸蒜魄,不對(duì),是為了更好的用戶體驗(yàn)3∏谈为!人們開(kāi)始開(kāi)發(fā)類庫(kù)。
類庫(kù)
為了更好的用戶體驗(yàn)踢关,人們開(kāi)始開(kāi)發(fā)類庫(kù)伞鲫,使用JavaScript在瀏覽器端渲染應(yīng)用。這些類庫(kù)使用的方法也不盡相同耘成,簡(jiǎn)單的使用帶參數(shù)的模板榔昔,復(fù)雜的就完全掌控整個(gè)應(yīng)用。隨著開(kāi)發(fā)者在越來(lái)越大的項(xiàng)目中使用這些類庫(kù)瘪菌,應(yīng)用也變得越來(lái)越難以把握撒会,因?yàn)檫@些應(yīng)用是一系列相互作用的結(jié)果。
React簡(jiǎn)介
React 是一個(gè) Facebook 和 Instagram 用來(lái)創(chuàng)建用戶界面的 JavaScript 庫(kù)师妙。發(fā)源自FaceBook的PHP框架XHP的一個(gè)分支诵肛,XHP作為一個(gè)PHP框架,其主旨在于每次有請(qǐng)求進(jìn)來(lái)時(shí)渲染整個(gè)頁(yè)面默穴。React的產(chǎn)生是為了把這種重新渲染整個(gè)頁(yè)面的PHP式工作流帶到客戶端應(yīng)用中來(lái)怔檩。
React本質(zhì)上是一個(gè)“狀態(tài)機(jī)”,可以幫助開(kāi)發(fā)者管理復(fù)雜的隨著時(shí)間而變化的狀態(tài)蓄诽。它以一種精簡(jiǎn)的模型實(shí)現(xiàn)了這一點(diǎn)薛训。React只關(guān)心兩件事:
- 最小化重繪DOM
- 單事件處理器
最小化重繪DOM
React不處理Ajax,路由和數(shù)據(jù)存儲(chǔ)仑氛,也不規(guī)定數(shù)據(jù)的組織方式乙埃。如果非要問(wèn)它是什么闸英,我們可以把它看做MVC里的“V”。React的精簡(jiǎn)允許你將其集成到各種各樣的系統(tǒng)中介袜。我們幾道甫何,在頁(yè)面渲染過(guò)程中,頻繁的操作DOM元素遇伞,會(huì)導(dǎo)嚴(yán)重影響頁(yè)面性能辙喂。而React通過(guò)一個(gè)虛擬的DOM實(shí)現(xiàn)了一個(gè)非常強(qiáng)大的渲染系統(tǒng),在React中可以做到對(duì)DOM的最小化重繪(_( ?Д?)?江湖傳言可以做到只更新不讀取...)鸠珠。
React把視圖更新簡(jiǎn)化為一個(gè)render函數(shù)巍耗,render函數(shù)只關(guān)心兩個(gè)參數(shù),分別是配置項(xiàng)和狀態(tài)跳芳。render函數(shù)讀入當(dāng)前狀態(tài)芍锦,并返回一個(gè)快速的DOM描述。只要React被告知狀態(tài)有變化飞盆,其會(huì)重新運(yùn)行函數(shù)娄琉,計(jì)算出新的DOM描述,然后判斷差異后吓歇,進(jìn)行最少的必要更新孽水。
單事件處理器
在web開(kāi)發(fā)過(guò)程當(dāng)中,過(guò)多的事件處理器會(huì)增大程序的開(kāi)銷城看,影響應(yīng)用的性能女气。通常我們會(huì)使用事件委托來(lái)減少事件處理器的數(shù)量。而React在整個(gè)應(yīng)用中只使用單個(gè)的事件處理器测柠,并且會(huì)把所有的事件委托到這個(gè)事件處理器上炼鞠,這一點(diǎn)也大大提升了React的性能。
參考
【1】《React引領(lǐng)未來(lái)的用戶界面開(kāi)發(fā)框架》
【2】Web 研發(fā)模式演變
【3】為什么使用 React?