JavaScript 框架之戰(zhàn)結(jié)束:React 是最終贏家?
發(fā)布日期:2022/4/21 11:23:16 瀏覽量:
編譯 | 張仕影 責編 | 鄭麗媛
出品 | CSDN(ID:CSDNnews)
框架之間的論戰(zhàn)一直以來都是 JavaScript 社區(qū)的熱門話題,也是業(yè)內(nèi)的圣戰(zhàn)之一。從剛開始的 jQuery,到后來的 AngularJS,再到現(xiàn)代框架,相關(guān)的討論從未停歇。
參與者
自從 JavaScript 這場框架“戰(zhàn)爭”開始以來,Backbone 與 Sencha 等框架逐漸“體力不支”,在戰(zhàn)斗中倒下了,它們所遺留下的只有大量需要維護的代碼。而存活下來的,像 jQuery 則變得越來越強大,如今擁有一個龐大的社區(qū);另外存活下來的還有像 Angular 這樣沒有預(yù)期中發(fā)展得那么好的框架,讓人略感遺憾。
· jQuery
jQuery 是一個快速、簡潔的 JavaScript 框架,它可能是目前最老的參賽者了。由于 jQuery 曾經(jīng)修復了瀏覽器之間的互操作性,因此它非常流行,但它的應(yīng)用卻很難擴展。
· AngularJS
AngularJS 作為一個基于 JavaScript 的開源前端框架,目前它已經(jīng)達到了生命周期終止的狀態(tài)(EOL),未來將不再獲得任何支持與維護,Angular 團隊希望現(xiàn)有用戶能夠遷移到下一代的 Angular 框架中。
由于它曾是框架生態(tài)系統(tǒng)的一次巨大飛躍,因此有不少人依舊懷念它。但因為它已經(jīng)不再被積極維護了,所以不算是一個競爭者。
· Angular
Angular 是如今高效和開源的 JavaScript 框架之一,起初它的誕生是為了與 React 競爭。隨著 AngularJS 越來越老,出現(xiàn)許多問題,而 React 卻發(fā)展得很好的情況下, AngularJS 團隊決定對其進行現(xiàn)代化改造,將 AngularJS 重寫為 Angular。
Angular 最令人感到繁瑣的應(yīng)該就是其陡峭的學習曲線,它需要很多概念,因為并不是所有東西都是直截了當?shù)?。想要學好 Angular 是很不容易的——它既繼承了 AngularJS 的學習曲線,又有像 RxJS 或分層依賴注入這樣的困難之處。
(Ben Nadel 的原圖)
Angular 存在的另一個問題是它至今還有許多目標沒有達成。例如,自從 Angular 2.0 以來,不少人都期待能有一個簡單的方法來創(chuàng)建服務(wù)器端渲染的頁面,但直到 2022 年 2 月,Angular.io 網(wǎng)站自身在沒有 JavaScript 的情況下仍然是無法工作的。
事實上,Angular 的最大問題是碎片化和版本升級。版本升級的困難程度甚至令用戶不愿意冒險升級其應(yīng)用,關(guān)于這一點,你可以在 npm 網(wǎng)站 上查看。
有很多在使用舊版本的用戶)
· VueJS
Vue 是比 AngularJS 性能更強,且比 Angular 更穩(wěn)定、更容易使用的框架。Vue 在其模板系統(tǒng)中非常接近最初的 Angular,它既保持了 AngularJS 的簡單性,同時又從 React 獲得了一些靈感。
不過 VueJS 在版本 1 和版本 2 中存在一個嚴重的問題:它不能很好地處理數(shù)組,編寫者把他們錯誤選擇更新算法導致的結(jié)果歸咎于 JavaScript。此外,如果你不使用像 Vuex 或 Redux 這樣的庫,可能就會出現(xiàn)嚴重問題。你可以在這里看到一個在 AngularJS 中工作的應(yīng)用程序,但卻不能在 VueJS 中看到。
(Vue 文檔的摘錄,將其變化檢測算法的局限性歸咎于 JavaScript)
所幸,這個問題在版本 3 中已經(jīng)得到了解決
· SvelteJS
SvelteJS 是一個逐漸強大的競爭者,它聲稱自己的主要優(yōu)勢是在構(gòu)建時會將組件轉(zhuǎn)換成高效率執(zhí)行的命令代碼。據(jù) SvelteJS 表示,這比 React 采取的聲明式更好。
SvelteJS 使用起來的確更簡單,但轉(zhuǎn)換成命令代碼以及生成的組件并不像看起來那么容易。在某些情況下,SvelteJS 無法正確檢測更改,當這種情況發(fā)生時,狀態(tài)可能會被破壞并且視圖也不會正確更新。這個問題引起了很多關(guān)注,導致 SvelteJS 像過去的 VueJS 一樣,很難證明它其中的項目都是合理的。
· StencilJS
StencilJS 作為基于 Web Components 設(shè)計的框架,從技術(shù)上講,StencilJS 并不算是真正的框架。實際上,StencilJS 允許編寫組件,并將其翻譯到其他框架。如今,它可以將組件轉(zhuǎn)換為 Angular、React、Vue 和 Web Components 組件。
· Mitosis
你可能并沒有聽說過 Mitosis,但正是因為它讓我寫了這篇文章。Mitosis 是 Angular 的創(chuàng)建者 Misko Hevery 開發(fā)的最新框架,并且 Mitosis 與 StencilJS 具有相同目標—— 將其組件轉(zhuǎn)化為許多框架。
· React
React 是最古老的現(xiàn)代框架之一,在 npm 存儲庫中有超過 10 年的歷史。盡管如今 React 已經(jīng)發(fā)生了很大的變化,但它仍然與大多數(shù)以前的版本兼容。近年來,React 發(fā)展得越來越好,有人表示,是 React 鉤子(React 函數(shù)組件的副效應(yīng),用來為函數(shù)組件引入副效應(yīng))創(chuàng)建了這個更好的框架。
不過 React 最厲害的地方并不是它的鉤子或是任何可見的功能,而是別的地方——React 推動了 JavaScript 的最新標準,也推動了 JSX 的發(fā)展。React 不再是一個框架,但也許它從來都不是——它只是一個庫。React 努力地推動標準,最終,它將自己從用戶代碼中移除。
最終的獲勝者
獲勝者當然就是……React,不過這并不是 React 本身,而是其背后的哲學。React 本身就是一個庫,它可以被許多其他庫所取代,例如 Preact 或 React Native。但如果你仔細觀察,會發(fā)現(xiàn) StencilJS 或是 Mitosis 與 React 非常相似,這并不是一個巧合,因為:
“最好的框架是將自己從用戶代碼中剝離出來的框架"
React 在很大程度上利用了 JavaScript 和 JSX(嵌入了 XML 的 JavaScript),而且用戶代碼對 React 來說是不可知的,只要稍加調(diào)整,完全相同的代碼就可以在其他框架中運行。
因此,毫無疑問,React 是框架之戰(zhàn)的最終贏家。
“赤裸裸的謊言”
作者 David Rodenas 在這篇文章中陳述了他對于 JavaScript 框架的不同觀點,以及他心目中的贏家,但不少網(wǎng)友對于此都持有相反意見:
@Brandon Taylor:“這篇文章完全在是胡說八道。當說到 Angular 是支離破碎的并且難以升級時,我立刻停止了閱讀——這簡直是一個赤裸裸的謊言。要知道升級 Angular 再簡單不過,而且 Angular 并不比任何其他框架更難學習。
@Marcos Sandrini:“作者寫這篇文章只是為了尋找理由來證明他對 React 感到滿意,而不是 React 是否讓其他人滿意這一事實。”
@P Bergqvist:“這是我讀過的最糟糕的文章之一。當文章提到 jquery 是一個框架時,就已經(jīng)失去所有的可信度了。”
@Attila Vágó:“我只知道沒有任何高級軟件工程師會得出這個結(jié)論,或是像文章中那樣進行比較,這是肯定的。”
那么,你對于這篇文章的觀點持有什么看法?
參考鏈接:https://medium.com/codex/the-javascript-framework-war-is-over-bd110ddab732
馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生