您當前位置: 南順網絡>> 官方資訊>> 行業動态

React 和(hé) Vue 到底誰更牛?聽聽尤雨溪怎麽說

知乎上近日有人發起了一(yī)個 “react 是不是比 vue 牛皮,為(wèi)什麽?” 的(de)問題,再度引發一(yī)場關于前端框架誰更牛的(de)口水戰,評論裏可(kě)以說是撕得不可(kě)開交。Vue.js 作者尤雨溪12月4日正面回應了該問題,他表示希望大家能停止無謂的(de)争執,多想想使用這些技術的(de)初衷,比起争論這個,倒不如(rú)多想想怎麽讓自(zì)己變得更牛。以下是尤雨溪的(de)回複:


這個問題下面的(de)很多回答太偏激了,其實我淡出知乎就是因為(wèi)這類破事... 但是作為(wèi)作者還是認真地(dì)說一(yī)說吧(ba),希望能以後别再有這種問題了。

這裏我可(kě)以大方地(dì)承認,如(rú)果多年(nián)以後要論曆史地(dì)位,React 肯定是高(gāo)于 Vue 的(de)。事實上,我作為(wèi)一(yī)個開發者,也是由衷地(dì)佩服 Jordan Walke, Sebastian Markbage 這樣的(de),能從開發模式層面上提出突破性的(de)新方向的(de)人。

React 從一(yī)開始的(de)定位就是提出 UI 開發的(de)新思路。當年(nián) Pete Hunt 最開始推廣 React 的(de)時候的(de)一(yī)句口号就叫 "Rethinking Best Practices",這樣的(de)定位使得 React 打開了一(yī)些全新的(de)思路,吸引了一(yī)群喜歡折騰的(de)早期核心用戶,并在這個基礎上通過社區叠代孵化出了許多今天被 React 開發者當作常識的(de) pattern。這是 React 偉大的(de)地(dì)方,Vue 裏面也有很多地(dì)方是直接受到了 React 的(de)啓發。React 敢做(zuò)這樣的(de)嘗試,是因為(wèi)它是 Facebook。這樣的(de)體量的(de)公司,在 infrastructure 層面獲得質的(de)提升,收益是巨大的(de),而且 Facebook 的(de)工程師們足夠聰明又要靠工資吃飯,改變他/她們的(de)習慣并不是什麽問題。而對外推廣,則是一(yī)種大公司才有的(de) “改變業界” 的(de)底氣。

Vue 從一(yī)開始的(de)定位就是盡可(kě)能的(de)降低(dī)前端開發的(de)門檻,讓更多的(de)人能夠更快地(dì)上手開發。我以前也說過,開發 Vue 的(de)初衷不是為(wèi)了搞個大新聞,隻是做(zuò)了個我自(zì)己用得舒服的(de)框架。我雖然也在 Google 這樣的(de)大公司呆過,但骨子(zǐ)裏是一(yī)個喜歡自(zì)由的(de)人,也一(yī)直覺得獨立開發者很酷(這也是為(wèi)什麽最終自(zì)己也成了一(yī)個獨立開發者)。很多時候我更希望自(zì)己做(zuò)的(de)東西能幫到那些中小型企業和(hé)個人開發者。舉個例子(zǐ)來說,美國傳統行業裏有很多 small business,它們不像大公司那樣有專門的(de) IT 團隊來信息化整個流程,很多隻能雇一(yī)個普通的(de) contractor 程序員,有些甚至是老闆自(zì)己兼職研究代碼。我收到過好幾封這樣的(de)感謝信,說因為(wèi) Vue 讓它們多快好省地(dì)做(zuò)了個內(nèi)部應用,解決了實際問題,這樣的(de)故事是讓我覺得特别爽的(de)。

做(zuò) React 這樣的(de)不迎合用戶,而是試圖改變用戶的(de)設計需要有足夠的(de)本錢:你得有足夠的(de)資源和(hé)背景去(qù)強行越過初始推廣的(de)那個陡坡。事實上,如(rú)果沒有 Facebook 作為(wèi) React 的(de)推廣者,React 很可(kě)能最終是一(yī)個有着忠實用戶群體的(de)小衆框架(比如(rú) Elm)。作為(wèi)一(yī)個個人項目的(de) Vue 沒有這樣的(de)宣傳資源,也并不是為(wèi)了改變用戶。所以從設計的(de)角度上來說,Vue 首先考慮的(de)是假設用戶隻掌握了 web 基礎知識 (HTML, CSS, JS) 的(de)情況下,如(rú)何能夠最快理(lǐ)解和(hé)上手,實現一(yī)個看得見摸得着的(de)應用。

一(yī)個 API 看得順不順眼,用得舒不舒服,很大程度上取決于你跟一(yī)個技術的(de)核心用戶群體的(de)重合程度。編程語言之間噴來噴去(qù)還少麽?大家都是圖靈完備,然而此之蜜糖,彼之砒霜。Vue 的(de) API 設計固然有可(kě)以商榷的(de)地(dì)方,但 React 也不是完美無瑕,不然也不會從 mixins 到 HOC 到 render props 一(yī)次次地(dì)折騰,更沒有 hooks 什麽事了。直到 Suspense 出現前,也不存在什麽隻有 React 才能做(zuò)到的(de)事情(順帶一(yī)提,有意思的(de)是 hooks 基本上廢掉了過去(qù)大部分基于組件的(de)邏輯抽象模式,抹掉了 JSX vs. 模版的(de)一(yī)個優勢,也完全可(kě)以用在其他框架裏,連 Angular 都已經有對應的(de)原型實現...)然而 “不完美” 并沒有妨礙在過去(qù)的(de)幾年(nián)內(nèi)大量的(de)用戶用各自(zì)選擇的(de)技術做(zuò)出實際的(de)産品 —— 從 State of JS 近兩年(nián)的(de)數據來看,兩者的(de)滿意率是差不多的(de),都在 90% 出頭,說明兩者在 “滿足目标用戶的(de)需求” 這個衡量标準下,表現是差不多的(de)。可(kě)維護性、可(kě)讀性、優雅程度、生态這些東西嘴上怎麽辯都可(kě)以,還是數據比較實在。

再說說具體技術層面:從加載速度、運行時性能來說,兩者目前綜合各種場景應該說是沒有什麽質的(de)差别。硬要說的(de)話,Vue 在 update 性能優化方面需要的(de)心智負擔可(kě)能少那麽一(yī)點 —— React 如(rú)果不注意,容易導緻過多的(de)組件無用 diff,但是實際上真正會遇到性能瓶頸的(de)應用也是少數... Vue 3 會比 Vue 2 快不少,加上模版編譯還有一(yī)些可(kě)進一(yī)步發掘的(de)優化空間,所以性能上會比現在的(de) React 有一(yī)定優勢,但 React 那邊也在研究基于 prepack 的(de)編譯時優化,這個也是挺值得期待的(de)。Vue 3 對于 TS 的(de)支持會有很大改善(包括 TSX),我們也在計劃對模版做(zuò)更好的(de) IDE 支持(比如(rú)補全、類型檢查),現在沒有不代表以後不能有,有批評我們改進就是了。其實過去(qù)大半年(nián) Vue 本身沒有什麽大更新是因為(wèi)精力都放在工具鏈上了,接下來又要回到核心上了。React 那邊 time slicing / Concurrent mode 要明年(nián) Q2 才穩定,那個時候應該 Vue 3 的(de) time slicing 應該也穩定了(原型已實現)。Suspense 在 data-fetching 穩定之前并沒什麽大用(要 2019 年(nián)中),這期間我們也會研究解決同類問題的(de)方案。所以從純技術層面來說,React 現在比 Vue 牛逼麽?不好說。以後一(yī)定比 Vue 牛逼麽?也不好說。

使用數量方面,有很多文章(zhāng)拿各種數據來比較,有的(de)是 GitHub stars,有的(de)是 npm 下載量,有的(de)是 Google trends,有的(de)是 StackOverflow 的(de)問題數量... 其實這些數據都有很明顯的(de)問題,那就是它們跟實際使用者的(de)數量并不一(yī)定是正比,會受到其它因素的(de)影響,比如(rú) GitHub stars 跟實際使用沒有直接關聯;使用者中使用 CI 的(de)比例會影響 npm 的(de)下載量;Google trends 很難完美過濾掉 React 這樣的(de)常見詞彙的(de) false positive;文檔和(hé)本身的(de)上手難易程度會影響 StackOverflow 的(de)問題數量,等等... 所以我自(zì)己一(yī)直是以 Chrome 開發者插件的(de)使用者數量作為(wèi)一(yī)個比較可(kě)靠的(de)數據,因為(wèi)它的(de)關聯度是最直接的(de),潛在的(de)幹擾因素也是最少的(de)。目前 Vue 的(de)開發者插件用戶數量約為(wèi) 70.4 萬,而 React 是 136.3 萬,大緻可(kě)以作為(wèi)參考。React 的(de)使用量還是有明顯優勢,不過這個數字比起兩年(nián)前已經很不一(yī)樣了 —— 那時候大約是 1:7 的(de)比例。從增速來看,Vue 是要快一(yī)些的(de)。

說了這麽多,無非是希望大家能停下來想想所謂的(de) ”A 技術比 B 技術牛逼“ 背後到底是在争些什麽,我們使用這些技術的(de)初衷又是什麽。很多時候你說這方面,他說那方面,雞同鴨講,即使說到一(yī)起去(qù),也往往缺乏對等的(de)信息量或者基礎共識,隻是各自(zì)表達主觀看法,最後變成兩個陣營各自(zì)抱團取暖... 說到底,就算你證明了 A 比 B 牛逼,也不意味着你或者你的(de)項目就牛逼了... 比起争這個,不如(rú)多想想怎麽讓自(zì)己變得更牛逼吧(ba)。

原文鏈接:https://www.toutiao.com/a6636344817754309128/

編輯:--ns868