vue?
API設(shè)計(jì)上簡(jiǎn)單,語法簡(jiǎn)單,學(xué)習(xí)成本低?
構(gòu)建方面不包含路由和ajax功能,使用vuex, vue-router?
指令(dom)和組件(視圖,數(shù)據(jù),邏輯)處理清晰?
性能好,容易優(yōu)化?
基于依賴追蹤的觀察系統(tǒng),并且異步隊(duì)列更新?
獨(dú)立觸發(fā)?
v-model 實(shí)時(shí)渲染
適用于:模板和渲染函數(shù)的彈性選擇?
簡(jiǎn)單的語法及項(xiàng)目搭建?
更快的渲染速度和更小的體積
react?
利用jsx創(chuàng)建虛擬dom?
是一種在內(nèi)存中描述dom數(shù)狀態(tài)的數(shù)據(jù)結(jié)構(gòu)?
函數(shù)式的方法描述視圖?
使用虛擬dom作為模板?
程序片段?
不好控制dom?
生命周期?
服務(wù)端渲染:react的虛擬dom的生成可以在任何支持js的環(huán)境生成的,所以可以在node環(huán)境生成,直接轉(zhuǎn)為string,然后插入到html文件中輸出瀏覽器便可?
適用于:大型應(yīng)用和更好的可測(cè)試性;同時(shí)適用于web端和原生app;更大的生態(tài)圈
優(yōu)點(diǎn)
React偉大之處就在于,提出了Virtual Dom這種新穎的思路,并且這種思路衍生出了React Native,有可能會(huì)統(tǒng)一Web/Native開發(fā)。在性能方面,由于運(yùn)用了Virtual Dom技術(shù),Reactjs只在調(diào)用setState的時(shí)候會(huì)更新dom,而且還是先更新Virtual Dom,然后和實(shí)際Dom比較,最后再更新實(shí)際Dom。這個(gè)過程比起Angularjs的bind方式來說,一是更新dom的次數(shù)少,二是更新dom的內(nèi)容少,速度肯定快?
ReactJS更關(guān)注UI的組件化,和數(shù)據(jù)的單向更新,提出了FLUX架構(gòu)的新概念,現(xiàn)在React可以直接用Js ES6語法了,然后通過webpack編譯成瀏覽器兼容的ES5,開發(fā)效率上有些優(yōu)勢(shì).?
React Native生成的App不是運(yùn)行在WebView上,而是系統(tǒng)原生的UI,React通過jsx生成系統(tǒng)原生的UI,iOS和Android的React UI組件還是比較相似的,大量代碼可以復(fù)用?
維護(hù)UI的狀態(tài),Angular 里面使用的是 $scope,在 React 里面使用的是 this.setState。 而 React 的好處在于,它更簡(jiǎn)單直觀。所有的狀態(tài)改變都只有唯一一個(gè)入口 this.setState(),Angular 就比較復(fù)雜,不知道背后使用了哪些黑魔法。?
同構(gòu)的JavaScript?
單頁面JS應(yīng)用程序的最大缺陷在于對(duì)搜索引擎的索引有很大限制。React對(duì)此有了解決方案。?
React可以在服務(wù)器上預(yù)渲染應(yīng)用再發(fā)送到客戶端。它可以從預(yù)渲染的靜態(tài)內(nèi)容中恢復(fù)一樣的記錄到動(dòng)態(tài)應(yīng)用程序中。?
因?yàn)樗阉饕娴呐老x程序依賴的是服務(wù)端響應(yīng)而不是JavaScript的執(zhí)行,預(yù)渲染你的應(yīng)用有助于搜索引擎優(yōu)化。?
缺點(diǎn)
React是目標(biāo)是UI組件,通??梢院推渌蚣芙M合使用,目前并不適合單獨(dú)做一個(gè)完整的框架。React 即使配上 redux 的組合,也不能稱之一個(gè)完整的框架,比如你想用Promise化的AJAX?對(duì)不起沒有,自己找現(xiàn)成的庫去。而且第三方組件遠(yuǎn)遠(yuǎn)不如Angular多。目前在大的穩(wěn)定的項(xiàng)目上采用React的,我也就只知道有Yahoo的Email。React本身只是一個(gè)V而已,所以如果是大型項(xiàng)目想要一套完整的框架的話,也許還需要引入Redux和route相關(guān)的東西。而Angular在這方面提供的東西比React多多了.
angular?
優(yōu)點(diǎn)
AngularJS是一套完整的框架,angular有自帶的數(shù)據(jù)綁定、render渲染、angularUI庫,過濾器,directive(模板),服務(wù)q(defer),http,inject(依賴注入),factory,provider……,等等一系列工具,基本上只要你在做web開發(fā)用過的東西,它都有一個(gè)。但是這些東西React自身都沒有。
Angularjs的架構(gòu)清晰,分工明確,擴(kuò)展性良好,model,view,controller誰在什么時(shí)候做什么事情說的很清楚,angular能夠讓程序員真正專注于業(yè)務(wù)邏輯,而且因?yàn)閷?duì)html侵入不大,非常易于和designer協(xié)作。整個(gè)框架充滿了DI的思路,耦合性非常低,對(duì)象都是被inject的,也就是說每個(gè)對(duì)象都可以輕易被替換而不影響其他對(duì)象。
Angular生產(chǎn)效率高,單向數(shù)據(jù)流什么的想法非常好,但是寫起來太麻煩!我只想變更個(gè)很簡(jiǎn)單的數(shù)據(jù)還要經(jīng)過action、dispatcher、reduce、view四步,angular里一行代碼就搞定的事情在react里卻如此麻煩
缺點(diǎn)
性能?
雙向數(shù)據(jù)綁定是一把雙刃劍。隨著組件增加,項(xiàng)目越來越復(fù)雜,雙向數(shù)據(jù)綁定帶來性能問題。?
雙向數(shù)據(jù)綁定是如何影響性能的?在JavaScript(ES5)中,并沒有實(shí)現(xiàn)當(dāng)變量或?qū)ο蟾淖儠r(shí)發(fā)出通知的功能,Angular的實(shí)現(xiàn)方法被叫做“Dirty-checking(臟檢查機(jī)制)”,通過跟蹤數(shù)據(jù)的改變?cè)賱?dòng)態(tài)更新用戶界面(UI)。?
在Angular的作用域中任何操作的執(zhí)行都會(huì)引發(fā)Dirty-checking,隨著綁定數(shù)量的增加性能就會(huì)越低。?
Angular 2.0推翻重做使得目前不宜采用此框架?
Angular 1.x版本其實(shí)是個(gè)比較舊的東西了,現(xiàn)在看來有些理念過時(shí)了,比如依賴注入、自己獨(dú)特的模塊化,這些東西其實(shí)在ES6下已經(jīng)很好地被解決了。?
Angular的2.0幾乎是一個(gè)推翻重做的框架,估計(jì)不會(huì)有1.X的upgrade方案。所以如果現(xiàn)在新開始的項(xiàng)目采用Angular的話,會(huì)是一個(gè)很尷尬的時(shí)機(jī)。同樣,如此大的改動(dòng)似乎也反面印證了1.X并不是那么好。?
學(xué)習(xí)成本高?
使用Angular需要學(xué)習(xí)大量的概念,包括但不限于:?
模塊?
控制器?
指令?
作用域?
模板?
鏈?zhǔn)胶瘮?shù)?
過濾器?
依賴注入
vue,react 共性:?
虛擬dom實(shí)現(xiàn)快速渲染?
輕量級(jí)響應(yīng)式組件?
服務(wù)端渲染易于集成路由工具,打包工具及狀態(tài)管理工具