angular有哪些優(yōu)缺點(diǎn)?

? ? ? ? ? ? ? ? ? ? ? ? ? ?【JS-10-angular有哪些優(yōu)缺點(diǎn)?】

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 分享人:聶義中

目錄

1.背景介紹

2.知識剖析

3.常見問題

4.解決方案

5.編碼實(shí)戰(zhàn)

6.擴(kuò)展思考

7.參考文獻(xiàn)

8.更多討論

1.背景介紹

angular有哪些優(yōu)缺點(diǎn)之前赞枕,簡單的介紹一下什么是angular稿茉。

記得在最開始學(xué)習(xí)前端知識的時候,了解到前端三個基礎(chǔ)html蘸际、CSS钉疫、JavaScript,他們可以簡單的? ? ? ? ? ? ? ? ? ? 表示為結(jié)構(gòu)、樣式和行為奄毡。

jQuery實(shí)質(zhì)上就是提供了一些前端常用的,針對元素的處理的簡便寫法贝或,可以把它看作一個JS的工具包吼过。

Angular則是一個MVVM框架锐秦。

要說清楚什么是MVVM框架,需要了解MVC框架那先,了解MVC框架农猬,需要了解一下前端開發(fā)的歷史。

前端開發(fā)的歷史和趨勢

什么是前端售淡?什么是后端斤葱?

前端:針對瀏覽器的開發(fā),代碼在瀏覽器運(yùn)行

后端:針對服務(wù)器的開發(fā)揖闸,代碼在服務(wù)器運(yùn)行

互聯(lián)網(wǎng)發(fā)展的早期揍堕,前后端開發(fā)是一體的,前端代碼是后端代碼的一部分汤纸。

1衩茸、后端收到瀏覽器的請求

2、生成靜態(tài)頁面

3贮泞、發(fā)送到瀏覽器

所以最初的網(wǎng)站是沒有樣式楞慈,更沒有行為互動,只有結(jié)構(gòu)啃擦,光禿禿的html囊蓝。但在那個時候已經(jīng)是很偉大的很先進(jìn)的東西。

那時的網(wǎng)站開發(fā)令蛉,采用的是后端 MVC模式聚霜。

1、Model(模型層):提供/保存數(shù)據(jù)

2珠叔、Controller(控制層):數(shù)據(jù)處理蝎宇,實(shí)現(xiàn)業(yè)務(wù)邏輯

3、View(視圖層):展示數(shù)據(jù)祷安,提供用戶界面

前端只是后端 MVC的 V姥芥。(切圖仔的由來?)

那時的前端工程師汇鞭,實(shí)際上是模板工程師撇眯,負(fù)責(zé)編寫頁面模板,比如我們現(xiàn)在寫的靜態(tài)頁面虱咧。

后端代碼讀取模板熊榛,替換變量,渲染出頁面腕巡。

Ajax技術(shù)誕生玄坦,改變了一切。

2004年:Gmail

2005年:Google地圖

前端不再是后端的模板,可以獨(dú)立得到各種數(shù)據(jù)煎楣。

因?yàn)锳jax是一種在無需重新加載整個網(wǎng)頁的情況下豺总,能夠更新部分網(wǎng)頁的技術(shù)。

Ajax技術(shù)促成了 Web2.0的誕生择懂。

Web1.0:靜態(tài)網(wǎng)頁喻喳,純內(nèi)容展示

Web2.0:動態(tài)網(wǎng)頁,富交互困曙,前端數(shù)據(jù)處理

從那時起表伦,前端變得復(fù)雜了,對前端工程師的要求越來越高慷丽。

前端 MVC框架

前端通過 Ajax得到數(shù)據(jù)蹦哼,因此也有了處理數(shù)據(jù)的需求。

前端代碼變得也需要保存數(shù)據(jù)要糊、處理數(shù)據(jù)纲熏、生成視圖,這導(dǎo)致了前端 MVC框架的誕生

2010年锄俄,Backbone.js

Backbone將前端代碼分成兩個基本部分局劲。

Model:管理數(shù)據(jù)

View:數(shù)據(jù)的展現(xiàn)

沒有 C。因?yàn)槟淘岸?Controller與后端不同鱼填。

不需要,也不應(yīng)該處理業(yè)務(wù)邏輯

只需要處理頁面邏輯车柠,響應(yīng)用戶的一舉一動,也就是和用戶的交互

所以剔氏,前端 Controller相對比較簡單塑猖。Backbone沒有 C竹祷,只用事件來處理頁面邏輯。

Router

前端還有一種天然的方法羊苟,可以切換視圖塑陵,那就是 URL。

通過 URL切換視圖蜡励,這就是 Router(路由)的作用令花。(html、js凉倚、angular)

前端 MVVM框架

另一些框架提出 MVVM模式兼都,用 ViewModel代替 Controller。

Model

View

View-Model:簡化的 Controller稽寒,唯一作用就是為 View提供處理好的數(shù)據(jù)扮碧,不含其他邏輯。

本質(zhì):view綁定 view-model,視圖與數(shù)據(jù)模型強(qiáng)耦合慎王。數(shù)據(jù)的變化實(shí)時反映在 view上蚓土,不需要手動處理。

MVC赖淤、MVVM蜀漆、MVW,這里重點(diǎn)理解一下MVVM咱旱。

Mmodel模型

Vview視圖

VMviewmodel視圖的模型

Ppresenter展示器

Ccontroller控制器

Wwhatever隨意

View視圖 通俗易懂确丢。就是前端的 HTML, CSS和 與 HTMLCSS有關(guān)的JS代碼莽龟。 寫一個Form表格蠕嫁,由 HTML架起,CSS做美化毯盈,JS來進(jìn)行動畫控制剃毒。

Model模型。簡單說是起到連接服務(wù)器搂赋,和商業(yè)邏輯的形成赘阀。 這里面很多需要異步處理,并且有需求獨(dú)立更新脑奠。因此基公,必須和視圖分離。

而連接上面這兩者的就是 ViewModal試圖模型宋欺。 這里只做連接轰豆,并不起到控制。保證獨(dú)立性齿诞。在多個 View和多個 Modal之前做到很好的橋梁的作用酸休。

P起到的作用更多是展示,部分控制,換句話說 Angular里面那么多 ng-show后面的代碼都可以理解為 P祷杈。

C起到的主體控制斑司。比如讀取 M的數(shù)據(jù),然后插入一個模塊到 V視圖里但汞。 如果用 Angular來解讀,Controller就是 C宿刮。

W則不分的那么具體。更為靈活私蕾。

前端可以做到:

讀寫數(shù)據(jù)

切換視

用戶交互

這意味著僵缺,網(wǎng)頁其實(shí)是一個應(yīng)用程序。

SPA=Single-pageapplication

2010年后踩叭,前端工程師從開發(fā)頁面磕潮,變成了開發(fā)“前端應(yīng)用”(跑在瀏覽器里面的應(yīng)用程序)。

Angular

Google公司推出的 Angular是最流行的 MVVM前端框架。

它的風(fēng)格屬于 HTML語言的增強(qiáng)揉抵,核心概念是雙向綁定亡容。

Vue

Vue.js是現(xiàn)在很熱門的一種前端 MVVM框架。

它的基本思想與 Angular類似冤今,但是用法更簡單闺兢,而且引入了響應(yīng)式編程的概念

React

React是從Facebook起源的最著名的庫。它使你的前端非常舒適戏罢,是一個非常獨(dú)特的客戶端庫屋谭。

React.JS的核心目標(biāo)是使前端能夠高效開發(fā)和重用聲明的插件。

? ? ? ? ? ? ? ? 回到angular

Angular目前有兩個比較大的版本龟糕,一個是 1.X桐磁,一個是 5.0,對于 2.0以下的版本統(tǒng)稱為 AngularJS讲岁,從 2.0版本開始稱為 Angular我擂。

那么AngularJS有哪些優(yōu)點(diǎn)與缺點(diǎn)呢?

2.知識剖析

? ? ? ? ? ? AngularJS的優(yōu)點(diǎn)

1.良好的應(yīng)用程序結(jié)構(gòu):

通常情況下缓艳,我們編寫 JavaScript沒有明確的結(jié)構(gòu)校摩。雖然在編寫小應(yīng)用程序的時候沒有問題,但這顯然是不適合于大規(guī)模的應(yīng)用程序阶淘。

? ? ? ? ? ? ? ? ? ? 使用 AngularJS衙吩,您可以通過MVC(模型 -視圖 -控制器)或MVVM(模型 -視圖 -視圖模型)模式來組織源代碼。

? ? ? ? ? ? ? ? ? ? AngularJS是一個 MVW框架溪窒,其中W代表可以用于任何項(xiàng)目坤塞。你可以組織你的代碼模塊,它可顯著提高應(yīng)用程序的可測試性和可維護(hù)性澈蚌。數(shù)據(jù)摹芙、業(yè)務(wù)邏輯、視圖的分離惜浅。? ? ? ? ? ? ? ?

2.雙向數(shù)據(jù)綁定

數(shù)據(jù)綁定肯定是 AngularJS最佳功能之一瘫辩。

? ? 你可以聲明綁定的模型到 HTML元素伏嗜。當(dāng)模型發(fā)生變化時坛悉,視圖會自動更新,反之亦然承绸。? 這可以減少大量的傳統(tǒng)樣板代碼裸影,保持模型和視圖同步。? ? ? ? ? ? ? ?

3.指令

自定義Directive军熏,比jQuery插件還靈活轩猩,但是需要深入了解Directive的一些特性,簡單的封裝容易榨惠,復(fù)雜一點(diǎn)官方?jīng)]有提供詳細(xì)的介紹文檔夺蛇,? ? ? ? ? ? ? ? ? ? 我們可以通過閱讀源代碼來找到某些我們需要的東西掷漱,如:在directive使用 $parse熟空;

4.HTML模板

AngularJS使用 HTML模板姓建,這使事情變得簡單剂习,并允許設(shè)計(jì)人員和開發(fā)人員同時工作玫恳。

? ? ? ? ? ? ? ? ? ? 設(shè)計(jì)人員可以按照通常的方式創(chuàng)建用戶界面哆姻,而開發(fā)人員可以使用聲明性綁定語法很容易配合不同的UI組件的數(shù)據(jù)模型焦影。? ? ? ? ? ? ? ?

5.依賴注入

? ? ? ? ? ? ? ? ? ?ng模塊化比較大膽的引入了Java的一些東西(依賴注入)车遂,能夠很容易的寫出可復(fù)用的代碼,對于敏捷開發(fā)的團(tuán)隊(duì)來說非常有幫助斯辰,? ? ? ? ? ? ? ? ? ? 我們的項(xiàng)目從上線到目前舶担,UI變化很大,在摸索中迭代產(chǎn)品彬呻,但是js的代碼基本上很少改動衣陶。? ? ? ? ? ? ? ?


? ? ? ? ? ?AngularJS的缺點(diǎn)

1.性能

雙向數(shù)據(jù)綁定是一把雙刃劍。隨著組件增加闸氮,項(xiàng)目越來越復(fù)雜祖搓,雙向數(shù)據(jù)綁定帶來性能問題。

? ? ? ? ? ? ? ? ? ? 雙向數(shù)據(jù)綁定是如何影響性能的湖苞?在JavaScript(ES5)中拯欧,并沒有實(shí)現(xiàn)當(dāng)變量或?qū)ο蟾淖儠r發(fā)出通知的功能,Angular的實(shí)現(xiàn)方法被叫做“Dirty-checking(臟檢查機(jī)制)”财骨,通過跟蹤數(shù)據(jù)的改變再動態(tài)更新用戶界面(UI)镐作。? ? ? ? ? ? ? ? ? ? 在Angular的作用域中任何操作的執(zhí)行都會引發(fā)Dirty-checking,隨著綁定數(shù)量的增加性能就會越低隆箩。? ? ? ? ? ? ? ?

2.Angular2.0推翻重做使得目前不宜采用此框架

Angular1.x版本其實(shí)是個比較舊的東西了该贾,現(xiàn)在看來有些理念過時了,比如依賴注入捌臊、自己獨(dú)特的模塊化杨蛋,這些東西其實(shí)在ES6下已經(jīng)很好地被解決了。? ? ? ? ? ? ? ? ? ? Angular的2.0幾乎是一個推翻重做的框架理澎,估計(jì)不會有1.X的upgrade方案逞力。所以如果現(xiàn)在新開始的項(xiàng)目采用Angular的話,會是一個很尷尬的時機(jī)糠爬。? ? ? ? ? ? ? ? ? ? 同樣寇荧,如此大的改動似乎也反面印證了1.X并不是那么好。

3.學(xué)習(xí)成本高

使用Angular需要學(xué)習(xí)大量的概念执隧,包括但不限于:

? ? ? ? ? ? ? ? ? ? ○模塊

? ? ? ? ? ? ? ? ? ? ○控制器

? ? ? ? ? ? ? ? ? ? ○指令

? ? ? ? ? ? ? ? ? ? ○作用域

? ? ? ? ? ? ? ? ? ? ○模板

? ? ? ? ? ? ? ? ? ? ○鏈?zhǔn)胶瘮?shù)

? ? ? ? ? ? ? ? ? ? ○過濾器

? ? ? ? ? ? ? ? ? ? ○依賴注入


4.不適合類型開發(fā)

(1:內(nèi)容網(wǎng)站揩抡,需要SEO的户侥。(SEO目前也有了prerender解決方案)https://prerender.io

(2:交互頻繁的,如游戲之類交互體驗(yàn)網(wǎng)站峦嗤。

(3蕊唐,太過于簡單的頁面。

Angular更適合于CRUD的管理系統(tǒng)開發(fā)烁设。

3.常見問題

Angular2相比 Vue有什么優(yōu)勢刃泌?

4.解決方案

Angular2相對于Vue的優(yōu)勢在Vue2.0之后已經(jīng)削弱很多了。比如SSR(Vue2已經(jīng)原生支持)和全棧式框架? ? ? ? ? ? ? ? (官方推薦Vuex+Vue-Router)署尤,native端也有阿里巴巴的weex耙替。但是Angular2在API設(shè)計(jì)的完整度和覆蓋度上還是Vue所不能及的,主要有這么幾點(diǎn):

? ? ? ? ? ? ? ? 1.Angular2原生Form支持:

? ? ? ? ? ? ? ? Angular2原生的Form模塊功能相當(dāng)強(qiáng)大曹体。除了雙向綁定之類的基本功能俗扇,還能通過programaticAPI控制dom元素的表單行為。? ? ? ? ? ? ? ? 也有成型API提供自定義validator箕别。這一點(diǎn)Vue只有v-model和第三方庫铜幽。對于后臺之類的重表單應(yīng)用,還是Ng2有優(yōu)勢串稀。? ? ? ? ? ?

? ? ? ? ? ? ? ? 2.依賴注入:

? ? ? ? ? ? ? ? 無論你喜不喜歡DI除抛,這就是Angular2的強(qiáng)大功能之一。有DI可以在不改變代碼結(jié)構(gòu)的情況下完成功能替換母截。? ? ? ? ? ? ? ? Vue則需要程序員自己規(guī)劃代碼組織到忽,用來支持共享組件。DI也可以用于類似modulelocalstate的功能清寇。? ? ? ? ? ? ? ? 比如喘漏,一個視頻播放控件有幾個子組件完成,子組件需要分享一個狀態(tài)华烟。這一點(diǎn)Angular2有原生的serviceinjectionpattern翩迈。而Vue則沒有官方推薦。? ? ? ? ? ? ? ? ? ? ? ? ? ?3.對標(biāo)準(zhǔn)向后兼容:

? ? ? ? ? ? ? ? Angular2在一些細(xì)節(jié)上對標(biāo)準(zhǔn)有更好的支持盔夜。比如 listdiffer算法中 Angular2可以支持實(shí)現(xiàn)了Symbol.iterator的對象负饲,? ? ? ? ? ? ? ? 而Vue只能支持Array。對Observable和Promise喂链,Angular2在應(yīng)用的各個地方返十,? ? ? ? ? ? ? ? 甚至模板級別都有支持(asyncpipe)。而Vue需要vue-rx等第三方庫支持衩藤。Angular2的組件有shadowdom的實(shí)現(xiàn)可以選擇吧慢,而Vue目前還沒有涛漂。? ? ? ? ? ?

? ? ? ? ? ? ? ?4.測試:

? ? ? ? ? ? ? ? Angular2一開始就設(shè)計(jì)好了如何對組件進(jìn)行測試赏表,而Vue組件雖然也很好寫測試检诗,但是沒有官方推薦的唯一標(biāo)準(zhǔn)。? ? ? ? ? ? ? ? 除此以外瓢剿,Angular2還有一些小功能比如檢驗(yàn)?zāi)0宓念愋桶踩昊牛贿^AoT本身似乎還沒有穩(wěn)定,所以不能算優(yōu)勢间狂。對TS的支持也是Angular好攻泼,? ? ? ? ? ? ? ? 當(dāng)然前提是你喜歡TS〖螅總體而言忙菠,就是Angular框架的全面性是難以撼動的。? ? ? ? ? ?


5.編碼實(shí)戰(zhàn)

6.擴(kuò)展思考

7.參考文獻(xiàn)

參考一:參考鏈接

參考二:知乎

8.更多討論

【1】Angular1怎么操作DOM元素纺弊?

解答:angular11. 操作DOM元素太過于麻煩牛欢,還需要封裝在自定義指令里面。

【2】angular自帶的JQlitegai怎么使用淆游?

解答:它是jQuery的輕量級版本傍睹,用法跟jQuery基本一樣。

【3】angular2好用還是angular1好用犹菱?

解答:作為升級版拾稳,肯定功能得到了一定的優(yōu)化,angular2肯定是強(qiáng)大一些腊脱。

鳴謝

感謝大家觀看

?BY:聶義中

今天的分享就到這里啦访得,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)陕凹、留言震鹉、拍磚~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捆姜,隨后出現(xiàn)的幾起案子传趾,更是在濱河造成了極大的恐慌,老刑警劉巖泥技,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浆兰,死亡現(xiàn)場離奇詭異,居然都是意外死亡珊豹,警方通過查閱死者的電腦和手機(jī)簸呈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來店茶,“玉大人蜕便,你說我怎么就攤上這事》坊茫” “怎么了轿腺?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵两嘴,是天一觀的道長。 經(jīng)常有香客問我族壳,道長憔辫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任仿荆,我火速辦了婚禮贰您,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拢操。我一直安慰自己锦亦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布令境。 她就那樣靜靜地躺著孽亲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪展父。 梳的紋絲不亂的頭發(fā)上返劲,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音栖茉,去河邊找鬼篮绿。 笑死,一個胖子當(dāng)著我的面吹牛吕漂,可吹牛的內(nèi)容都是我干的亲配。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼惶凝,長吁一口氣:“原來是場噩夢啊……” “哼吼虎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苍鲜,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤思灰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后混滔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洒疚,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年坯屿,在試婚紗的時候發(fā)現(xiàn)自己被綠了油湖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡领跛,死狀恐怖乏德,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吠昭,我是刑警寧澤喊括,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布胧瓜,位于F島的核電站,受9級特大地震影響瘾晃,放射性物質(zhì)發(fā)生泄漏贷痪。R本人自食惡果不足惜幻妓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一蹦误、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肉津,春花似錦强胰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至距糖,卻和暖如春玄窝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悍引。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工恩脂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趣斤。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓俩块,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浓领。 傳聞我的和親對象是個殘疾皇子玉凯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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