是該讀些評(píng)論和做一些總結(jié)的時(shí)候了。當(dāng)我們開始寫這個(gè)系列博客的時(shí)候,我們知道 JavaScript/web 應(yīng)用框架并不太好總結(jié)。我們努力對(duì)這個(gè)不可回答的問題作出回答:我該用什么樣的框架?
在這篇文章中,我們將對(duì)這個(gè)系列中所提到的每款框架做一個(gè)總結(jié),包括我們所認(rèn)為的強(qiáng)項(xiàng)和弱項(xiàng)。另外,我們?yōu)槟懔粝铝艘恍┲档盟伎嫉膯栴}。
我是否需要使用框架?
如果不嘗試回答這個(gè)問題就是我們的失職,這越來越成為社會(huì)上某些人的口頭禪,在網(wǎng)絡(luò)平臺(tái)上的爭(zhēng)論也已經(jīng)發(fā)展到猶如不需要額外編寫 API 能更簡(jiǎn)單創(chuàng)建 Web 應(yīng)用那樣的地步。就像本系列中所有的內(nèi)容一樣,我們的回答也大都是依據(jù)這些內(nèi)容。
雖然無框架也能正常工作,但是,這也是有代價(jià)的。那些主張無框架手寫 Javascript 的人,那些通常會(huì)被我們認(rèn)為是斯德哥爾摩綜合癥(情感上會(huì)依賴他人且容易受感動(dòng)的人)的人,忘記了網(wǎng)絡(luò)平臺(tái)上有多套快速發(fā)展的 API ,至少有三種不同的技術(shù),三種截然不同的語法。web 平臺(tái)規(guī)范并確定了超過 12000 個(gè) API,事實(shí)上瀏覽器中的維恩圖也顯示了這些巨大差距。
如果你是一個(gè)有著深厚技術(shù)和經(jīng)驗(yàn)的人,確實(shí)可以坦誠(chéng)的不使用框架。但你團(tuán)隊(duì)的其他成員呢?你手下的那些人呢?或者當(dāng)你的決定把你自己陷入困境的時(shí)候呢?這種情況下,我們將會(huì)看到一個(gè)不用框架的團(tuán)隊(duì)在展開冒險(xiǎn),最后他們會(huì)發(fā)現(xiàn)自己創(chuàng)建了一個(gè)需要自己著手維護(hù)的框架。接著就會(huì)出現(xiàn)尋找人才的問題,他們不需要知道框架是如何工作的,只需要尋找會(huì)調(diào)用網(wǎng)絡(luò)平臺(tái) API 的高級(jí)技能人才或者一些自稱有經(jīng)驗(yàn)的人才,最后卻發(fā)現(xiàn)缺少利于團(tuán)隊(duì)發(fā)展的技能深度和經(jīng)驗(yàn)。
團(tuán)隊(duì)?wèi)?yīng)該避免虛假等價(jià)( false equivalence )的陷阱,很顯然,在 web 技術(shù)的應(yīng)用方面具有創(chuàng)新性的公司在不斷提高他們的市場(chǎng)價(jià)值和競(jìng)爭(zhēng)力,Google、Facebook 和 Netflix 公司都是很好的例子。但是大多數(shù)公司不是這樣,他們應(yīng)該承認(rèn)這一點(diǎn)。
Angular 2+
有什么優(yōu)勢(shì)?
Angular 2+ 的最大優(yōu)勢(shì)在于它的流行程度。也有人認(rèn)為它和 Google 密切相關(guān)的名字,會(huì)影響團(tuán)隊(duì)使用它。Angular 1 的迅速流行是因?yàn)槟切﹣碜云渌换ナ綉?yīng)用程序開發(fā)環(huán)境的人會(huì)發(fā)現(xiàn)對(duì)于開發(fā)單頁(yè)面 web 應(yīng)用程序具有相似的模型-視圖模式。通過對(duì) Angular 1 進(jìn)行現(xiàn)代化演變和重新構(gòu)建框架的某些部分,Angular 2+ 已經(jīng)真正的爆發(fā)了,大量的正式的和非正式培訓(xùn)機(jī)構(gòu)數(shù)量都讓人印象深刻,開發(fā)者有很強(qiáng)的市場(chǎng)競(jìng)爭(zhēng)力。對(duì)于用戶來說它有一套用于構(gòu)建用戶界面的豐富組件,這也是本系列中少有的幾個(gè)框架能夠做到這點(diǎn)。
有什么弱點(diǎn)和挑戰(zhàn)?
我們覺得 Angular 框架著重于在單個(gè)頁(yè)面應(yīng)用程序中創(chuàng)建用戶界面并沒有處理構(gòu)建完整的 web 應(yīng)用這個(gè)更大的關(guān)注點(diǎn),如果不及早確定下來,這將會(huì)導(dǎo)致整個(gè)項(xiàng)目難以維護(hù),在實(shí)際項(xiàng)目中,運(yùn)行時(shí)提供不屬于核心框架的技術(shù)往往讓人覺得不可思議,這大大降低了 TypeScript 對(duì)最終開發(fā)者的價(jià)值。
未來將何去何從?
Angular 5 剛剛發(fā)布,這看來是 Angular 已經(jīng)成功的印證了快速發(fā)布版本的承諾,在 Google 的持續(xù)支持下,Angular 會(huì)越來越成熟。
像許多的大型組織一樣,Google 具有多重(分裂)的人格,從外表上看,Angular 團(tuán)隊(duì)和那些專注于瀏覽器標(biāo)準(zhǔn)的團(tuán)隊(duì)之間顯得很和諧。但我們的觀點(diǎn)是,和諧只是一層薄薄的窗戶紙。Angular 團(tuán)隊(duì)對(duì)于 web 組件和漸進(jìn)式 web 應(yīng)用沒有一個(gè)真正解決方案。我們認(rèn)為,業(yè)界普遍認(rèn)可的標(biāo)準(zhǔn)將會(huì)在 Angular 框架中會(huì)逐步實(shí)現(xiàn),這將會(huì)影響到如何更好的構(gòu)建 Angular 應(yīng)用將成為一個(gè)中/長(zhǎng)期的風(fēng)險(xiǎn)。
何時(shí)選擇 Angular 2+
如果你需要在一個(gè)大型的框架內(nèi)獲取技術(shù)資源,框架內(nèi)的技術(shù)通常很容易移植;或者你需要在框架中訓(xùn)練開發(fā)人員,并且還要有一定的信心,他們會(huì)在短期內(nèi)獲得一定的開發(fā)能力,這樣的話你可以考慮 Angular 2+ 。需要注意的是 Angular1(angular.js)與 Angular2+ 是截然不同的,其中的應(yīng)用、技術(shù)和經(jīng)驗(yàn)不能直接移植到 Angular2+ 的開發(fā)中去。
如果你的 web 應(yīng)用能夠很好的轉(zhuǎn)化為標(biāo)準(zhǔn)的模型-視圖模式,那么你也可以忽略其他直接考慮使用 Angular2+ 。
如果你對(duì) Google Material UX 設(shè)計(jì)模式滿意,那么 Material Angular 是遵循該模式的一種快速、簡(jiǎn)單且可靠的方式。
React + Redux
有什么優(yōu)勢(shì)?
React 和 Redux 的最大優(yōu)勢(shì)在于它們相對(duì)簡(jiǎn)單和專注。做一件事情并把它做好是非常困難的,但這兩個(gè)庫(kù)都很有效地完成了它們的目標(biāo)。雖然對(duì)于某些狀態(tài)容器方法可能是外部的,但大多數(shù)開發(fā)人員還是可以輕松掌握概念,并了解單向數(shù)據(jù)體系結(jié)構(gòu)的好處,簡(jiǎn)化大量的用戶界面應(yīng)用程序。
有什么弱點(diǎn)和挑戰(zhàn)?
React 和 Redux 最大的弱點(diǎn)不是它們是什么,而是它們不是什么。要構(gòu)建一個(gè)功能豐富的 Web 應(yīng)用程序,你需要許多功能,一旦脫離 React 和 Redux 和其他一些庫(kù)的核心,你將發(fā)現(xiàn)一個(gè)非常分散的社區(qū),擁有無數(shù)的解決方案和模式,不容易整合在一起。
因此,雖然 React 和 Redux 都是非常專注的庫(kù),但缺乏經(jīng)驗(yàn)的團(tuán)隊(duì)還是會(huì)很容易地生成不可維護(hù)的解決方案,而不是意識(shí)到他們所做的選擇會(huì)導(dǎo)致性能不佳或錯(cuò)誤。 即使有經(jīng)驗(yàn)的開發(fā)人員也可能意識(shí)到,一個(gè)松散的架構(gòu)或慣例可能會(huì)在未來困擾他們。
假省錢是一種對(duì)自己的欺騙,組織范圍內(nèi)采用 React 和 Redux 將輕松降低無效率問題。 沒有其他庫(kù)和模式的廣泛約定和標(biāo)準(zhǔn)化,標(biāo)準(zhǔn)化 React + Redux 比較于我們正在采用的 JavaScript 來編寫我們的應(yīng)用程序效率要高。
未來將何去何從?
Facebook 和 React 最近從繁瑣的附加專利糾紛中抽離,他們認(rèn)識(shí)到,就像其他項(xiàng)目一樣,更廣泛的社區(qū)能夠提高自己的聲音。 我覺得這有助于 Facebook 意識(shí)到他們還不能 更好地了解我們, 相信我們來引導(dǎo)項(xiàng)目。 希望這將繼續(xù)貫穿項(xiàng)目的特點(diǎn)和技術(shù)方向。
很難預(yù)測(cè) React 和 Redux 的未來。 但是,將庫(kù)集中在一起,確實(shí)會(huì)顯著提高適應(yīng)性,大多數(shù)React + Redux 模式都會(huì)促進(jìn)一個(gè)分離的體系結(jié)構(gòu),從而可以輕松地進(jìn)行重構(gòu)和迭代。 兩年前,大家喜歡的還是React + Flux,但整個(gè)社區(qū)很快就擁抱了Redux。 思維或模式的其他重大轉(zhuǎn)變可能很容易被采納。 這種關(guān)鍵能力可能會(huì)持續(xù)到未來。
何時(shí)選擇 React + Redux ?
如果你很少需要 手把手指導(dǎo) ,并且正在尋找更好的庫(kù)而不是全面的框架,那么 React + Redux 可能是正確的。 在這一過程中,你不僅需要對(duì)你的團(tuán)隊(duì)和組織的能力保持誠(chéng)實(shí),還要在你的初始開發(fā)過程中,以及在整個(gè)應(yīng)用程序的長(zhǎng)期維護(hù)過程中保持誠(chéng)實(shí)。
Vue.js
有什么優(yōu)勢(shì)?
漸進(jìn)式構(gòu)建能力是 vue.js 最大的優(yōu)勢(shì),vue 有一個(gè)簡(jiǎn)潔而且合理的架構(gòu),使得它易于理解和構(gòu)建。
vue 有一個(gè)強(qiáng)大的充滿激情人群的社區(qū),這為 vue.js 增加了巨大的價(jià)值,使得為一個(gè)空白項(xiàng)目創(chuàng)建一個(gè)綜合的解決方案變得十分容易。
有什么弱點(diǎn)和挑戰(zhàn)?
在模型-視圖應(yīng)用程序和狀態(tài)容器類型的應(yīng)用程序之間的互相轉(zhuǎn)換可能會(huì)令人感到困惑,即使沒有完美包含一個(gè)模式到另一個(gè)模式的完美轉(zhuǎn)換,但讓人感覺希望能維持兩個(gè)模式的相關(guān)性。對(duì)于那些期待 vue.js 完美解決方案,并可能導(dǎo)致難以維護(hù)不一致的應(yīng)用程序的人來說,這至少是令人困惑的。
一個(gè)更大的挑戰(zhàn)是 vue.js 依賴于一個(gè)單獨(dú)的人,很明顯,其他的項(xiàng)目基本是由一個(gè)組織提供支持,但這讓人感覺更加有意義,雖然它有一個(gè)強(qiáng)大文件的社區(qū)和許多有創(chuàng)新的新增項(xiàng)目,但是 vue 核心的開發(fā)基本落在一個(gè)人身上。
我們很高興看到 vue 更加容易接受新興的標(biāo)準(zhǔn)方法,但是它的類似于 web 組件的模式,而不是真正的 web 組件,這可能是 vue 所得不償失的地方。
未來將何去何從?
雖然 vue.js 有相當(dāng)廣泛的應(yīng)用,但也很難預(yù)測(cè)在中期發(fā)展中這個(gè)勢(shì)頭能持續(xù)多久,它不是由一個(gè)商業(yè)組織直接支持并維護(hù),因此,這很大程度上依賴于維護(hù)者的生存能力和繼續(xù)維護(hù)下去的愿望來決定。
它也表現(xiàn)出了一定程度的語言適應(yīng)能力,并且隨著某些模式的落伍和失寵而繼續(xù)保持自身語言的現(xiàn)代化和時(shí)代性,目前沒有跡象表明 vue.js 架構(gòu)將來無法適應(yīng)進(jìn)一步發(fā)展。
何時(shí)選擇 Vue.js?
如果你有一個(gè)傳統(tǒng)的 web 應(yīng)用程序,并需要一個(gè)強(qiáng)壯穩(wěn)健的應(yīng)用程序?qū)?,那?vue.js 可能是一個(gè)很好的選擇,它有清晰的模式,即使沒有經(jīng)驗(yàn)的團(tuán)隊(duì)也能正確或者錯(cuò)誤的使用它。盡管 vue UX 框架沒有開箱即用的功能,但在 vue.js 上也能大量持續(xù)性構(gòu)建應(yīng)用,這將有利于你的項(xiàng)目。
Dojo 2
有什么優(yōu)勢(shì)?
Dojo2 專注于帶來更多構(gòu)建在狀態(tài)容器體系之上的動(dòng)態(tài)組件的體驗(yàn)?zāi)J剑钛a(bǔ)了 react+redux 等框架的許多空白。
Dojo2 也知道它不單單只是在自己的生態(tài)圈發(fā)展,通過包含 web 組件導(dǎo)入和導(dǎo)出功能,也意識(shí)到需要支持不同的應(yīng)用實(shí)例,但它依舊提供了一個(gè)結(jié)構(gòu)化和固有的框架價(jià)值,Dojo2 的核心基礎(chǔ)仍然是專注于提供交互性。
Dojo2 覺得它提供了大量重要的功能和解決方案,這對(duì)于構(gòu)建完整的 web 應(yīng)用是十分重要的,對(duì)于其他大多數(shù)框架而言這并不是重點(diǎn)。提供一個(gè)國(guó)際化系統(tǒng)和廣泛的易接入性的模式也是其中之一,同時(shí)也提供一個(gè)主題系統(tǒng)和演進(jìn)模式,用以確保不僅能為 Typescript/JavaScript 提供良好的代碼開發(fā),也能像 CSS 那樣管理資源。
Dojo2 專注于提供一個(gè)結(jié)構(gòu)化和符合人體工程學(xué)的開發(fā)環(huán)境,通過使用 typescript 和其他開發(fā)模式,它試圖提供安全的防護(hù)機(jī)制去引導(dǎo)新手開發(fā)人員,通過專注于提高框架開發(fā)效率和開發(fā)安全性,旨在讓開發(fā)團(tuán)隊(duì)能夠快速交付更好的 web 應(yīng)用程序。
有什么弱點(diǎn)和挑戰(zhàn)?
有爭(zhēng)論的是,通過進(jìn)一步延長(zhǎng) Dojo2 的發(fā)布時(shí)間的做法是否是在阻礙框架的發(fā)展,反觀其他項(xiàng)目由于其資源的擴(kuò)大能夠繼續(xù)發(fā)展和快速迭代,導(dǎo)致 Dojo2 目前明確的處在一個(gè)擁擠的競(jìng)爭(zhēng)環(huán)境之中。
這也許是一個(gè)潛在的發(fā)展機(jī)遇和挑戰(zhàn),同時(shí)希望能夠在靈活性和交互性上而不是別的特殊理由去使用 Dojo2 。
未來將何去何從?
Dojo2 將是未來優(yōu)秀 web 框架之一,它將繼續(xù)努力為構(gòu)建可擴(kuò)展性的 web 應(yīng)用程序提供清晰的模式和指導(dǎo)。隨著新標(biāo)準(zhǔn)的不斷出現(xiàn),Dojo2 將進(jìn)一步努力去在框架中實(shí)現(xiàn)新的標(biāo)準(zhǔn)方法,繼續(xù)嘗試擴(kuò)大框架的開放性和交互性,創(chuàng)造適合更多人使用的解決方案。
何時(shí)選擇 Dojo2?
如果你想采用一個(gè)靈活的、現(xiàn)代的、響應(yīng)式的 web 應(yīng)用程序架構(gòu),并且你需要很多智能化的默認(rèn)設(shè)置,那么 Dojo2 將是一個(gè)不錯(cuò)的選擇。不用去拼湊和構(gòu)建一個(gè)管道,并且為你提供更高階的命令模式讓你可以更加專注的開發(fā)項(xiàng)目,更加確認(rèn)它是直接為你可以直接生產(chǎn)開發(fā)所準(zhǔn)備的。另外,如果你了解 typescript 的優(yōu)勢(shì),Dojo2 會(huì)十分嚴(yán)謹(jǐn)?shù)氖褂?typescript 來管理并提供一個(gè)穩(wěn)健的開發(fā)者開發(fā)環(huán)境。
Ember
有什么優(yōu)勢(shì)?
Ember.js可能是最固執(zhí)己見的主流框架,這也是其最大的優(yōu)勢(shì)。它有創(chuàng)建Ember.js應(yīng)用程序的正確方法,通常只有一種方法來創(chuàng)建應(yīng)用程序。Ember.js更類似于一個(gè)產(chǎn)品或平臺(tái),在那里你會(huì)到一個(gè)供應(yīng)商的長(zhǎng)期支持和維護(hù)。Ember.js提供了對(duì)其平臺(tái)的全面版本管理,升級(jí)工具以及對(duì)API升級(jí)的強(qiáng)大指導(dǎo)和工具。成熟,是對(duì)Ember.js的一個(gè)很好的總結(jié)。
Ember.js多年來已經(jīng)證明,它可以保持其框架并使其與現(xiàn)代標(biāo)準(zhǔn)保持一致,同時(shí)不會(huì)過早遺忘傳統(tǒng)瀏覽器。
Ember.js有一個(gè)清晰合理的架構(gòu)來全面構(gòu)建Web應(yīng)用程序。
有什么弱點(diǎn)和挑戰(zhàn)?
Ember.js可能是最固執(zhí)己見的主流框架,這也是它最大的弱點(diǎn)。雖然社區(qū)是開放的并且接受投資,但是仍然需要找到一個(gè)正確的方式來擺脫下滑的趨勢(shì),這可能是具有挑戰(zhàn)性的問題。
擁有一個(gè)豐富的第三方社區(qū)也可能具有挑戰(zhàn)性。由于沒有開箱即用的UX組件,這很可能會(huì)讓你使用第三方套件。你可能會(huì)發(fā)現(xiàn),雖然這些套件并不全面,你將需要建立或?qū)ふ移渌M件。由于Ember.js沒有擴(kuò)展,所以對(duì)如何交互和管理DOM,你會(huì)發(fā)現(xiàn)你有不一致的部件,而且也沒有提供一個(gè)易于管理的界面。
未來該何去何從?
Ember.js的主要貢獻(xiàn)者是JavaScript語言標(biāo)準(zhǔn)委員會(huì)TC39的核心參與者。在過去的幾年中,Ember.js對(duì)JavaScript的方向比任何其他框架都有更直接的影響。我們的觀點(diǎn)是,這將在未來繼續(xù)受影響,并幫助促進(jìn)JavaScript的特性和模式。這也意味著Ember.js將繼續(xù)保持與未來標(biāo)準(zhǔn)的緊密結(jié)合的關(guān)系。
Ember.js不可能在將來隨時(shí)消失,盡管他們的創(chuàng)新很可能是通過與Ember.js緊密結(jié)合的其他項(xiàng)目來實(shí)現(xiàn)的,比如Glimmer,它為Ember.js應(yīng)用程序提供了一個(gè)新的UI框架,該框架基于TypeScript。
為什么我會(huì)選擇Ember.js?
如果你在框架中尋找成熟度,那么Ember.js很難出錯(cuò)。另外,由于Ember.js提供的內(nèi)容被理解,并且有廣泛的官方和官方認(rèn)可的培訓(xùn),以及嚴(yán)格的結(jié)構(gòu),找到能夠建立基于Ember.js的應(yīng)用程序的人才可能比其他框架更容易。也可以教大型團(tuán)隊(duì)如何構(gòu)建應(yīng)用程序,并確保整個(gè)團(tuán)隊(duì)的共同對(duì)話和理解。
如果你想要對(duì)社區(qū)保持信心,并批判性地思考他們平臺(tái)的變化,那么Ember.js會(huì)是一個(gè)很好的考慮因素。您可以花更少的時(shí)間跟隨當(dāng)前的技術(shù)趨勢(shì),并更多地關(guān)注創(chuàng)建應(yīng)用程序。
Aurelia
優(yōu)勢(shì)在哪?
Aurelia有很多關(guān)于構(gòu)建Web應(yīng)用程序的方法,結(jié)構(gòu)和想法。 這個(gè)框架的編寫有很多技術(shù)上的優(yōu)點(diǎn)。
有什么弱點(diǎn)和挑戰(zhàn)?
我們估計(jì)最大的挑戰(zhàn)就是核心發(fā)展的動(dòng)力和臨界物質(zhì)的缺乏 。 我們感覺很多的觀點(diǎn)和概念都是我們對(duì)其他框架的批評(píng)性的想法,但是這些愿望都沒有完全交付。它似乎就像是一個(gè)正在進(jìn)行的工作一樣,就像Dojo 2,但是它已經(jīng)是一個(gè)已發(fā)布的框架。
大部分的Aurelia是坐落在一個(gè)人的肩膀上,如果這個(gè)人的的注意力或可用性改變,那么將會(huì)帶來挑戰(zhàn)。
未來會(huì)如何?
對(duì)于Aurelia來說,有一個(gè)很大的機(jī)會(huì)。如果它能夠?qū)崿F(xiàn)他的愿景,他將要完整的保存這個(gè)構(gòu)建Web應(yīng)用程序的已有的模板,但會(huì)以更健全、更完整的方式交付。我們不知道Aurelia是否能夠充分的利用這次機(jī)會(huì)。
為什么我會(huì)選擇Aurelia?
如果您致力于Web模型視圖應(yīng)用程序模塊,并且你和你的團(tuán)隊(duì)試圖想把一些事做的更好,那么Aurelia會(huì)是一個(gè)選擇。它就像是一個(gè)正在尋求一個(gè)更大的社區(qū)來幫助它的發(fā)展和進(jìn)化的框架。
最后的思考
真心希望這一系列的帖子至少給了你一點(diǎn)思考,你應(yīng)該很容易有這樣的想法那就是不可能有可驗(yàn)證的正確決定。同時(shí),希望你也意識(shí)到?jīng)]有普遍的錯(cuò)誤決定,你應(yīng)該用一些問題和思考來武裝自己,幫助你選擇框架。
一個(gè)框架僅僅是一些模式的體現(xiàn),一些科技的集成,源碼幫助我們更加容易去構(gòu)建和維護(hù)網(wǎng)站應(yīng)用,如果你是個(gè)體開發(fā)者,我們能提供的最好的建議是花費(fèi)盡可能多的時(shí)間使用那些你認(rèn)為可以為你所用的框架。如果你是公司的管理者或骨干領(lǐng)導(dǎo)要去做決定,請(qǐng)記住特點(diǎn)列表只是決定的一方面,有時(shí)候并不是越多越好。挑戰(zhàn)你自己活著你的團(tuán)隊(duì)使用一個(gè)整體的框架,但是首先,列出對(duì)你和你的組織重要的列表,尤其是那些技術(shù)之外特點(diǎn)。
-
Web
+關(guān)注
關(guān)注
2文章
1255瀏覽量
69299 -
API
+關(guān)注
關(guān)注
2文章
1475瀏覽量
61761 -
javascript
+關(guān)注
關(guān)注
0文章
515瀏覽量
53762
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論