vue?
API設(shè)計(jì)上簡(jiǎn)單秉版,語(yǔ)法簡(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)單的語(yǔ)法及項(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è)過(guò)程比起Angularjs的bind方式來(lái)說(shuō)肮之,一是更新dom的次數(shù)少,二是更新dom的內(nèi)容少卜录,速度肯定快?
ReactJS更關(guān)注UI的組件化戈擒,和數(shù)據(jù)的單向更新,提出了FLUX架構(gòu)的新概念艰毒,現(xiàn)在React可以直接用Js ES6語(yǔ)法了筐高,然后通過(guò)webpack編譯成瀏覽器兼容的ES5,開發(fā)效率上有些優(yōu)勢(shì).?
React Native生成的App不是運(yùn)行在WebView上丑瞧,而是系統(tǒng)原生的UI柑土,React通過(guò)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?
單頁(yè)面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組件咐蚯,通常可以和其它框架組合使用蜓斧,目前并不適合單獨(dú)做一個(gè)完整的框架仓蛆。React 即使配上 redux 的組合睁冬,也不能稱之一個(gè)完整的框架挎春,比如你想用Promise化的AJAX?對(duì)不起沒有豆拨,自己找現(xiàn)成的庫(kù)去直奋。而且第三方組件遠(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庫(kù),過(guò)濾器,directive(模板),服務(wù)q(defer),http,inject(依賴注入),factory,provider……粤铭,等等一系列工具挖胃,基本上只要你在做web開發(fā)用過(guò)的東西,它都有一個(gè)梆惯。但是這些東西React自身都沒有酱鸭。
Angularjs的架構(gòu)清晰,分工明確垛吗,擴(kuò)展性良好凹髓,model,view怯屉,controller誰(shuí)在什么時(shí)候做什么事情說(shuō)的很清楚蔚舀,angular能夠讓程序員真正專注于業(yè)務(wù)邏輯防泵,而且因?yàn)閷?duì)html侵入不大,非常易于和designer協(xié)作蝗敢。整個(gè)框架充滿了DI的思路捷泞,耦合性非常低,對(duì)象都是被inject的寿谴,也就是說(shuō)每個(gè)對(duì)象都可以輕易被替換而不影響其他對(duì)象锁右。
Angular生產(chǎn)效率高,單向數(shù)據(jù)流什么的想法非常好讶泰,但是寫起來(lái)太麻煩咏瑟!我只想變更個(gè)很簡(jiǎn)單的數(shù)據(jù)還要經(jīng)過(guò)action、dispatcher痪署、reduce码泞、view四步,angular里一行代碼就搞定的事情在react里卻如此麻煩
缺點(diǎn)
性能?
雙向數(shù)據(jù)綁定是一把雙刃劍狼犯。隨著組件增加余寥,項(xiàng)目越來(lái)越復(fù)雜,雙向數(shù)據(jù)綁定帶來(lái)性能問(wèn)題悯森。?
雙向數(shù)據(jù)綁定是如何影響性能的宋舷?在JavaScript(ES5)中,并沒有實(shí)現(xiàn)當(dāng)變量或?qū)ο蟾淖儠r(shí)發(fā)出通知的功能瓢姻,Angular的實(shí)現(xiàn)方法被叫做“Dirty-checking(臟檢查機(jī)制)”祝蝠,通過(guò)跟蹤數(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)在看來(lái)有些理念過(guò)時(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ù)?
過(guò)濾器?
依賴注入
vue,react 共性:?
虛擬dom實(shí)現(xiàn)快速渲染?
輕量級(jí)響應(yīng)式組件?
服務(wù)端渲染易于集成路由工具,打包工具及狀態(tài)管理工具