如何評價大漠窮秋的文章《Vue從Angular裡面抄了哪些東西?》?
鏈接: Vue從Angular裡面抄了哪些東西?
問題相關:Angular有哪些地方比Vue更優秀?,為什麼只會Vue的都是前端小白?
先補充幾個歷史知識點。MVVM 這個,很多人都說過了,不贅述。數據綁定這個事情,IE6就原生支持。雙向綁定,2003年成為W3C推薦標準的 XForms 里就有。要是當初瀏覽器廠商有點遠見,在瀏覽器里實現了 XForms,以後的歷史根本不會有 Angular 什麼事情。
「抄襲」完全是潑髒水了。React社區有無數跟React幾乎完全兼容的實現,facebook有任何人(膽敢)污衊人家抄襲么?連當初minggleJS,我們也只是鄙視作者代碼那麼爛,都沒罵抄襲呢。
說點題外話。
窮秋同學出道還是挺早的,圈內人緣原本還不錯,前個月的TFC,窮秋還是嘉賓之一,我還正好跟他兩人一桌吃午飯。不過當時我跟他尬聊時,就略感他對一些技術的歷史認知有些偏激。本來,有觀點是好事,但是得建立在相對準確的歷史事實認知上才行。我想著以後有機會再聊好了。(呃,我還沒跟別人吐槽過,現在就已經變成馬後炮了。)不料這次搞了個大新聞。自作孽啊,眼見著要淪為比某當老師更慘的境地了(畢竟某當老師現在也不混前端,所以無所謂),一段時間內恐怕很難再在各技術會議的台上看到他了。因為不僅是認可Vue的人對他不滿。React社區的,比如郭達峰,也看不下去。非前端社區的,比如左耳朵耗子,也看不下去(他在微博上回復「一個給國人爭氣,一個給國人丟臉,鮮明的對比。做個佈道師不是這麼沒有下限的……」)。最慘的是,很可能連Angular圈子都混不下去了。之前兩篇,主要搞(或曾經主要搞)Angular的業界同仁,比如徐飛、湯桂川等還能出來打打圓場,但現在這篇,真是沒得洗,太low了。還有一點,我在其他地方評論里說了,窮秋找錯對象了。論框架設計,你要去懟Avalon(正美不好意思又讓你躺槍了),或許還能半斤八兩;要是去懟RegularJS(海波不好意思,連累你也躺槍),我已覺得勝算堪憂。何況是Vue!!在前端框架這個Arena,小右是世界冠軍級別的。隨便都跟React核心團隊、Angular核心團隊的人(也就是窮秋的老闆)談笑風生。所以,各位蠢蠢欲動,想要搞大新聞的同學,以後一定要引以為戒啊,引以為戒!
我不是來回答問題的。
只是想提醒在用Vue和Angular的學生,如果你學了用了Vue,就學下去,用下去。如果你學了Angular,就學下去,用下去。根本性的概念是相通的。我知道有些人耳根子軟,聽大神一句就立刻調轉船頭。
搞技術誰都有自己偏好,正常。但初學者在形成自己偏好前,請自覺忽略這些噪音,少既是多。本事先學到,再來論長短,而不是本事沒學到,就東家長西家短。
尤雨溪到底給你了多少錢,我 Facebook 出雙倍,求求你也來噴噴 React 吧。
----------很正經的分割線--------------
這還是那個我認識的大漠窮秋嗎?
抄襲這個帽子扣的太大了,我覺得首先得確定「抄襲」的定義是什麼,才能說你抄了我哪些東西。
計算機出現的數十年來,出現了極為龐大的編程語言、工具、軟體、應用,細化到了比如密碼學、通信學、圖形學、PLT、軟體工程、機器學習等等各種大領域,每個領域都有龐大的分支和深度,這裡面有奠基者、有開拓者、有集大成者,更有很多站在巨人肩膀的普羅大眾們。
就拿編程語言舉例,現代編程語言影響最廣的C語言,也從ALGOL 68、FORTRAN甚至是PL語言里借鑒了大量特性,如果說C語言用了a = 10;這個作為賦值語法,你其他語言就不能用的話,那麼後來的編程語言該有多麼苦逼啊。
不管vue還是angular,他們都是以JS編寫的,而JS這門編程語言,從開始創建的時候就已經到處借鑒了,比如說它的語法、控制流來自於C語言,函數值、閉包來自於scheme,原型鏈來自於self,正則表達式借鑒當時大火的perl,而且還模仿java把數據分為原始值和對象。
如果按照這種擴大化的抄襲定義,那麼JS這門編程語言幾乎全是抄襲,事實上到了ES6時代,它的各種新添加的語法和特性,全部可以在其他編程語言里找到對應,就拿python做對比:
- destructuring: python早就支持 a,b,c = [1,2,3] x,(y,z) = [2,(3,4)] 這種多層解構語法,ES6「抄襲」。
- class: python早就支持class、super關鍵字,ES6「抄襲」。
- default function parameters: python早幾百年就function(a=1) 了,ES6「抄襲」。
- rest parameters:es6新加的三點號函數參數,python只要一個function (*a)就可以讓a變成一個參數tuple,ES6「抄襲」。
- template literals: python的一個%操作符就可以做到的事情,ES6「抄襲」後還沒法動態綁定變數。
- generator:python在2002年就可以用yield語法解八皇后了,那個時候ES3.5還沒有,ES6在十幾年後「抄襲」。
- iterator:python里大行其道的iterator也在ES6被「抄襲」。
- module:ES6的import b from a「抄襲」了python是from a import b。
我在上面所有的抄襲二字上都加了引號,是因為我對於抄襲這兩個字所承擔的罪名看的比較重,我認為這個詞不能輕飄飄的隨便用,它是一種性質非常嚴重的指控。
回到本次問題上面,專欄文章列舉出來很多相似特性,然後指控為抄襲,在加上文章的嚴厲措辭,這種基本上等同於戰時檄文了。
然而我們稍微分析一下,能發現這篇文章有很多問題。
MVVM
文章一開始交待了傳統表單的操作多麼彆扭,需要一個新的解決方案,於是前端引入mvvm就成了解決這個問題的一條路,這裡vue涉嫌抄襲angular的雙向綁定,但事實上:
- mvvm思想不是angular提出來的,是在WPF時代被Cooper首先應用上的設計思想,它和MVC、MVP有很強的淵源,並不是憑空出現。
- mvvm也不是由angular首先引入前端框架的,knockout可能是首個大規模引入該特性的前端框架。
- mvvm只是一個思想,對於如何把數據和dom綁定,其實現上有很大不同,angular1.x的臟檢查、vue的Object.defineProperty、更新框架用到的Proxy,甚至像avalon那種為了兼容IE而用上的vbscript。大家對於一道題的解法都不同,說抄襲太過了。
html-parser
angular1.x的時候就使用html-parser這個依賴了,但這不能斷定vue用相同依賴就是抄襲。
事實上,vue以前是沒有這個依賴的,vue1.x的編譯流程也不是文章里所述的那樣,而是直接採用了document的api來做的,用的最多的是document.createDocumentFragment,所以vue1.x有個局限性就是要求所有的template都合法。
Vue.js uses a DOM-based templating implementation. This means that all Vue.js templates are essentially valid, parsable HTML enhanced with some special attributes
vue2.x大改,不再使用DocumentFragment,為的是讓parser和dom不耦合,分離了編譯和渲染這兩個階段,加入vdom這個過渡並不是為了監聽數據變化(vue隨時都能知道哪個數據改變了),而是為了能支持更多平台,所以才能有vue-ssr或者weex這樣工具出現。
拿vue2.x加入了html-parser來說明抄襲angular,真的是搞錯了。
vue一開始不用html-parser有其理由,加入html-parser也有其理由,和angular1.x是否用了html-parser真的沒關係。
filters
- filters這個特性用來解決同一數據不同展示的需求,既不是angular開創的,也不是angular首先引入前端的。
- 後端mvc時代,各種後端語言(例如php)模板里就已經有filters這個特性了
- angular之前的前端模板時代,採用helper func的實際上就是filters的變種
- filters這個特性的思想可以追溯到pipe,但在前端應用上它基本上是format、helper這種功能,改名為pipe不見得就比filters更能表達意思。
directive
文章說了angular1.x沒有突出組件,所以大量使用directive,隨後斷定vue也是這個情況,但事實並非如此。
vue的directive和angular1.x的directive完全不是一個概念,它一開始就把component和directive的功能分開了,所以用戶一直使用的是component,而極少使用directive,這個可不是angular那種directive滿地爬的情況。
如果按照文章的邏輯,angular應該是「抄襲」了vue,因為vue一直是把兩者分開的,vue的directive完全沒有什麼模板功能,只是一個附帶的擴充功能而已。
至於原文里那句標粗的大字:「一直在抄襲,幾乎沒原創」,惡意太大了。
最近三天發了三篇文章懟vue,引發了一場前端圈撕逼熱潮,各種圈外的人士也紛紛笑看熱鬧,各種站隊的、吃瓜的、潑水的、攪水的、蹭熱點的絡繹不絕。
現在是樹欲靜而風不止,但這件事情最終會消停的,看客們也會回歸日常或者追下一個樂子,誰也傷害不了誰,甚至可以說對於angular或者vue的口碑的影響也不會很大,未來這兩個框架份額如何,很難說,但不會因為一次噴口水推廣就能讓份額大增或者大降。
有句老話叫一山不容二虎,但若一山真的只有一隻老虎的話,老虎很快就會滅絕了。
逐條反駁
「雙向數據綁定」的設計思想最早是在微軟的.NET實現的,2009年,AngularJS 1.x第一個把這種思想應用到了前端開發領域。現在,幾乎所有前端開發框架都接受了「雙向數據綁定」的設計思想,當然也包括一直不斷抄襲的Vue。
照作者的邏輯,如果實現先後算是後實現的抄的先實現的,那大家都抄的WPF。
再讓我們看看到底是不是AngularJS第一個把MVVM帶到前端。我clone了幾個流行的js MVVM框架,我們看第一次commit的時間:
AngularJS:2010-01-06
Vue.js:2013-07-28
Knockout:2010-07-05
avalon:2013-06-09
ember:2011-05-24
CanJS:2010-02-11
乍一看,好像AngularJS確實是「第一個」。但是我們別忘了,那只是first commit,不是一個可用的版本,那又怎麼能算是「2009年,AngularJS 1.x第一個把這種思想應用到了前端開發領域」這樣的話來呢?況且,first commit是在2010年。
更新:@Trotyl Yu 聚聚指出:Hello World, amp;amp; is here AngularJS的Github 的 Repo 是後面抽出來的。那上面這段就不成立了,大家見笑
如果真的實現了這樣一種「綁定機制」,你會發現,上面那種「麵條」代碼全部都會被消除掉,前端代碼量會突然被大幅度簡化。從這個角度說,「雙向數據綁定」是目前評判一款前端框架是否優秀的核心要素。
React哭暈在廁所
注意看下面的對比
如何才能檢測到某個JS對象的值被修改了:AnguarJS 1.x裡面給了一個很粗暴的實現來解決這個問題,AngularJS 1.x會為每一個進行數據綁定的HTML標籤創建一個watcher。然後,當發生任何可能會導致數據模型被修改的情況下,就會啟動一輪$digest循環,把所有watcher全部運行一遍,看看有沒有東西需要自己更新(目前Vue的實現思想與此類似,它底層使用了Object.defineProperty)
對,Vue底層是使用了Object.defineProperty,AngularJS確實用的dirty check。
可能有人不懂這些是什麼,我簡單說明一下。
要實現雙向綁定,肯定要實現「怎樣知道某個值變動了」這麼一個機制。那麼我們可以怎麼得知哪個值變動了呢?有兩種辦法。
一種是,我一直去掃描它。比如我掃描的上一次a是1,我把這個1記住。下一次掃描的時候,發現a變成了2,跟我記住的值不一樣,那麼這個值就變了,可以通知其他機制進行同步。這叫dirty check,也就是AngularJS採用的辦法。這種辦法會遭遇ABA問題,就是,在一個掃描周期內,觸發了兩次賦值:a初始值是1,a=2,a=1。那這時候,掃描到的值沒變,但實際上已經變過了。
還有一種是,我既然要更改這個值,那我肯定有個操作進行了更改。那麼,我注入這個操作,然後讓這個操作更改完成後,給我發一個通知,我就知道這個值變了,也就是Vue.js 1.x採用的辦法。Object.defineProperty可以定義屬性的setter,那麼有人調用setter改動這個值的時候,我就能進行值是否變動的確認。不說Vue有多高效,但AngularJS是真的低效。當然,Angular已經解決了這個問題,也就就變成了所說的第二種辦法。(此處說法有誤,見評論區)
恭喜Vue,以後VDom就是你的「核心特性」了,可以挺直腰板對外宣稱,Vue比React的渲染速度還要快!
也恭喜React社區,你們迎來了史上最強大的抄襲者。它會把最核心的設計思想全部抄走,然後再把自己宣傳得比原版還要強大好多倍。
再看看Vue.js的文檔:對比其他框架 — Vue.js
React 社區為我們準確進行平衡的考量提供了非常積極的幫助,特別感謝來自 React 團隊的 Dan Abramov 。他非常慷慨的花費時間來貢獻專業知識來幫助我們完善這篇文檔。
不想多說
再到html parser這裡,我沒懂作者想表達什麼。不是很懂。附原文:
這裡面有一步操作需要「編譯」開發者自定義的指令(組件),所以,我們需要一個parser,然後我們非常欣喜地看到Vue-2.0.0-alpha.1裡面引入了和AngularJS 1.x同一款開源的htmlparser,請看圖:
(圖片略)當然,這個地方有可能是個巧合,畢竟英雄所見略同嘛。對於Vue歷次發布的版本,我正在和AngularJS 1.x的各個版本做詳細的源代碼交叉對比。我會盡量詳細閱讀每個版本的代碼,看看Vue是如何從一個只有2760行代碼(VueJS 0.6.0,含注釋)的小玩具,一步一步抄到今天這麼龐大的,希望源代碼裡面不要出現讓人更加尷尬的情況。
引用同一個庫有什麼問題?為什麼要被噴?John Resig是AngularJS的人嗎?htmlparser是專門給AngularJS準備的嗎?不是很懂。
重新定義了「抄襲」
首先,不得不承認vue早期參考了angular,編程風格和雙向綁定等等,後來也借鑒了react的一些思想,virtual-dom,jsx,單向數據流。
先說一下這些概念,雙向綁定,虛擬dom,jsx,單向數據流等這些新技術出現,都是對老技術的革命性的改進,能淘汰或替代老技術,在這一方面,angular和react不一定是最先的開創者,但是因為它們,這些概念得到了普及,他們的優秀自然是公認的。但是,擁抱新技術就叫抄襲嗎?如果好的技術不被推廣和使用,人類如何進步?你可以這麼想,比如設計模式IOC控制反轉肯定不是你發明的,你在寫代碼中使用了這個模式,你為自己抄襲設計模式感到羞愧嗎?你當然不會,你反而會自豪我用了這麼一個高級的東西。
其次,Vue並不是簡單抄襲這些概念,vue基本上實現angular和react大部分優秀的部分,看性能,看體積,比靈活性,客觀數據請看這個 對比其他框架 — Vue.js,一個框架能實現了當前最優秀的技術,而且能保持靈活性和較小的體積和較高的性能,這個就是藝術,當你能做出比這個更好的框架,再噴他不遲。我一路是從angular1,react到vue,而且不太想再回到react了,不是我用了react、vue或者angular,我就牛逼了,而是我用他們做出了什麼,所以我們不應該更關注的是開發效率和靈活性和性能嗎?這一方面我覺得vue勝出。
再次,說一下框架抄襲這個問題
你難道是希望我們的所有框架完全沒有任何公共點?這就叫原創嗎?這是你希望看到的嗎?
你真的有精力永不知疲倦去學每一個完全不一樣的新框架嗎?
前端技術本來就是顛覆式的發展,曾經的頭牌jquery,現在門前冷落鞍馬稀。曾經的amd、cmd的模塊化requirejs,seajs,都已經被立上了墓碑。5年前你會java,今天你應該還會,5年前你會前端,對不起,今天不一樣了。這些顛覆大部分是源於javascript出生時先天缺陷,現在已經逐步的完善和強壯。我不希望這種顛覆式發展是持久的,作為一個常態更因該是累積式發展的。所以我更希望我們的框架表面都長一個樣,但背後各有各的優點和優勢。
你做了一個手機,然後別人做了類似的手機,你可以說人家抄襲你,但人們真正買他手機的原因肯定是因為他背後的用心和品質讓別人感受到了。同樣,真正讓人選擇vue的原因不是他抄襲了angular和react,而是它表現出來的各種優點。
能夠理解大漠窮秋的不快,可惜太容易被激怒了,說的東西也沒說中要害。
在國內前端社區,如果要在框架比較中想把vue比下去,是不能有失誤的,因為你沒有第二次機會。
我第一次接觸vue的時候直觀感覺也是抄的ng1,那時候和同事把vue的repo clone下來瀏覽了一下。依稀記得,最開始的那些commit,就是對ng1的模仿,到後來某一次突然刪掉那些代碼重寫了,才有了第一版為大家所熟知的vue。那個時候尤雨溪在推廣vue的時候也很謙虛的,贏得了大家的好感。
順便說一下vue曾經一度宣傳的性能優勢。其實當時我們心知肚明的是,ng1由於推出的早,一開始由於瀏覽器兼容的需要,是不可能採取劫持各個屬性的setter,getter的方式的,結果使得臟值檢查成了ng1的歷史包袱。雖然在後面版本的ng1中,隨著新的功能推出,瀏覽器兼容性也沒那麼好了,但是歷史包袱也很難甩掉了。並且在實現上,其實臟值檢查是更為複雜的。
當時看到宣傳這樣的性能優勢的時候,我也沒說什麼,覺得在api高度近似的基礎上,有一個輕量的選擇也是挺好的,雖然我知道vue的技術並沒有超過ng1。當時一高興還給vue主頁上的捐錢地址打了一點錢表示一下鼓勵。
後來隨著宣傳的擴大,vue的受眾增多,vue比ng1強就幾乎成了一個共識。尤其是react橫空出世,而ng2遲遲難產的時候。ng1由於歷史包袱的緣故在那段時間的改觀也很小,而vue小步快跑,迅速又從react借鑒來很多東西,這時候vue開始去和react比較高下。我也是這段時間從ng1轉向react的。
那個時候我覺得vue可能弄巧成拙成為一種集眾家之長的框架了。比如說ng1開發效率高,但是可維護性不好,性能不高。react的單項數據流可維護性好些,但是開發效率低下。我覺得如果用vue的話,可以在業務層單向數據流,保持項目的清晰;在功能組件樹中,可以使用跨組件的雙向綁定來提高開發效率。這樣似乎非常不錯。
可惜後來vue在模仿react的路上越走越遠,很快就不提倡跨組件的雙向數據綁定了,可能是因為考慮到受眾有很多小白的關係,怕他們濫用吧,vue2.0出來後這些亮點就消失了。
過了沒多久,angular2漸漸完善,angular開始以新姿態回歸。然而這個時候,angular的推廣是不順利的,不順利的原因是對ng的印象還沒有轉變過來,而社區發言又以半桶水最為活躍,各種帶節奏的,吹噓vue吊打ng的言論也是很多,我一個寫react的看著也有點氣惱。學過一點ngx的多多少少知道,ngx已經做了非常大的改進,也做了大量創新,過去ng1所被人詬病的問題全沒了。可是還是很少人用。
而一些vue吹也確實過頭了。坦白說,大漠窮秋不服氣的地方大概在於:vue的聲譽和它所做的創新程度根本不匹配。是,模仿和改進可以在已有框架基礎上做出更易用一丟丟的api,但是憑什麼獲得超過原框架更高的讚譽?沒有angular和react就不會有今天的vue,但是沒有vue, angular照樣是angular, react照樣是react。
所以他的氣惱和不服氣我是能夠理解的。可是他說的那些話確實不著點,說成了angular首創雙向數據綁定。露出這麼大以馬腳哪能放過,於是大家一哄而上拳腳相加揍他丫的。而vue在前端圈的歷史貢獻無法與react,angular並肩這件事,就被大家忽略了,亦或是知道但不敢說。
我想說我理解大漠窮秋的不快,但是罵戰真的沒用啊,如果想讓別人知道ng的好,就多說說ng的好,但凡用過別的前端技術的,聽到好的東西總還是有數的。那些心裡沒數的,也不是什麼好的開發者。何必弄這一出,在不擅長的事情上去發揮呢?
再說最後一點,我是因為看到那個老外的聊天截圖才來回答的,但如果大漠窮秋真的因為這個事情丟掉了谷歌的飯碗,這絕對不是一個好的徵兆,對你們前端社區來說。(我從去年下半年開始對開發已經沒太大興趣了,也沒有混前端圈的打算,故而說「你們」)
「上一個懟vue的,墳頭草已經一丈高了。」
最近比較忙,剛剛看到這裡很熱鬧,我直接說我的觀點吧:
「忘記歷史=背叛」
先說說《Vue從Angular裡面抄了哪些東西?》,這個「抄」字用的很妙唉。
我98年上研期間,有幸跟著南開大學的朱瑞香老先生學習了一個學期的《高級程序語言設計原理》課程,由此有機會學著審視編程語言的發展歷史。
看看編程語言發展的歷史唄:
- Basic當年為啥這麼火?語法「抄」了Fortran。
- Logo語言當年為啥是啟蒙的第一選擇?語法「抄」了Lisp。
- 應用於Delphi系統的Pascal語言為啥這麼NB?語法「抄」了Algol 60。
- Java曾經一統天下了吧?語法風格完全「抄」的C啊。
- 還記得ColdFusion嗎?語法「抄」的HTML。
- 現在火起來的golang, kotlin......像C還是像Java啊?反正都差不多。
- 大名鼎鼎的C#,「抄」的C++還是「抄」的Java啊?
- 再說說Javascript吧,「抄」的最徹底了,連語言的名字都抄……
各位年輕的大牛們,還有臉使用js寫框架么?呵呵。
再來一波:
- 結構化編程大約是Algol60提出來的吧(我記不清了),後來各大語言都在「抄」啊
- 面向對象編程大約是Smalltalk提出來的吧,現在有幾個語言沒有這個機制啊
- 函數式編程是LISP語言最早吧,現在逼格高的scala, clojure, erlang, Haskell……不都是在標榜自己能這樣幹麼?
- 要不然就在提一下Ruby on Rails,這個框架出來之後,各大語言社區……鋪天蓋地一樣。
大漠同學後來又寫了一篇《只會用Vue的都是小白》?
我只會用最原始的Javascript,還不太熟,豈不是小白白?(小白們,具體掌握的是哪一個框架不重要哈,具體掌握的是哪一個語言也不重要哈,真的。)
再看看歷史唄:
- 當年高級語言發展如何蓋過(不是消滅)彙編的?簡單而美唄
- 當年Java如何蓋過C++的?簡單而美唄
- 當年各種腳本語言如何又蓋過Java的?簡單而美唄
- 當年JQuery怎麼蓋過Dojo和YUI的?簡單而美唄
- 現在Vue……靠,我說不下去了。
我對前端的技術圈子不太熟,但是看看這幾輪爭論,唉~~
ng陣營想黑vue可以啊,但是拜託有點技術含量好吧。
我現在都有點陰謀論的想法了:尤先生和Google都商量了什麼條件,才能讓Google派出來這種智商的人來替自己宣傳……
大漠窮秋是為了宣傳Angular怒噴Vue的唯一的人。
他身材很高大;青白臉色,皺紋間時常夾些傷痕;頂著一個光頭。
穿的雖然是長衫,可是又臟又破,似乎十多年沒有補,也沒有洗。
他對人說話,總是滿口Vue抄襲, 學vue都是小白,叫人半懂不懂的。
大漠一到知乎,所有用vue的人便都看著他笑,有的叫道,「大漠,vue又抄Angular了!」
他不回答,低頭碼字,「Vue從Angular4和React抄襲了什麼。」
便排出一行大字標題。
他們又故意的高聲嚷道,「你一定今年KPI完不成了!」
大漠睜大眼睛說,「你怎麼這樣憑空污人清白……」
「什麼清白?我前天親眼見你到處噴vue, 論據又站不住腳,被大家嘲笑。」
大漠便漲紅了臉,額上的青筋條條綻出,爭辯道,「推廣Angular不算噴……技術討論!……程序員的事,能算噴么?」
接連便是難懂的話,什麼「Angular雙向綁定」,什麼「八字鬍插值」之類,引得眾人都鬨笑起來:
知乎內外充滿了快活的空氣。
繼續來寫回答,拋開其他平台對比,單單只從前端角度來說一下反駁點:
一:雙向數據綁定
1.如果沒記錯的話,最早大面積使用這個的真的應該算是knockout.js,當年ng1最早的特性里並沒有存在mvvm,而是在後期忘了哪個版本中開始加入的,而在那之前,knockout.js已經將mvvm作為核心理念進行推出,但是由於其api文檔的繁瑣以及自定義的各種observable,observableArray等api讓數據聲明顯得很繁瑣,所以國內使用率並不算很高。那此處是否可以說明ng也是抄襲knockout.js呢?
2.關於Observeable實現,ng一直dirty checking,Vue一直defineReactive(通過defineProperty進行訪問器屬性改造)這兩點上,實現上可以說基本沒什麼可以抄襲的點,無非就是監聽到$scope/vmodel變化的時候觸發watcher的變化,況且你要說這裡Vue像ng,倒不如說更接近avalon= =
3.關於api,這點上早期Vue為了能夠吸引更多用戶,的確採用了跟ng類似的api設計,同樣的情況歷史上也出現過:jQuery與Prototype.js都是使用$,所以,噴Vue為啥不順便噴一下jQuery也是抄襲呢?
4.關於vdom的使用:Vue宣稱比React快,但是尤大在更多的場合下也說過,快的原因是因為Vue內部的通過defineReactive能夠幫助大多數開發者儘可能的減少React中需要手動優化shouldComponentUpdate的場景,相當於做了無腦優化,這個我在之前的回答里也曾經寫過,有利有弊,但是大多數情況下的確是Vue表現更加優秀,這點沒什麼好噴的吧…
以及vdom在React中的應用是屬於為了減少真實dom的操作,在Vue中其實是為了為了避免大量的watcher與dom綁定,造成watcher上過多的引用,減少這部分的內存開銷。Vue1在設計之初已經是處於最小粒度的優化了,但是因為parser使用的是遍歷dom attrs以及通過createDocumentFragment來完成codegen部分,這兩點導致Vue1在首次渲染以及內存佔用上比較高,但是關於減少真實dom操作這塊,最小粒度的觸發watcher,本身來說就是細粒度更新的最優解了。
在Vue2時期,Vue引入vdom其實在更新粒度上相當於做了一部分妥協,這樣組件內Observe -&> watcher,都可以無腦的直接交由重新執行render來生成vdom diff,雖然損失了一部分細粒度更新的精準度與dom更新速度,但是在內存佔用上大大減少了不必要的開銷,跨平台那個事兒只是順帶著就有了
這一塊雖然都是使用了vdom,但是可以看到跟react想要解決的問題是不太一樣的。
2.HTML解析器
這塊前面說了,Vue最開始是通過遍歷dom attrs以及通過createDocumentFragment來完成codegen部分,但是關於html parser的部分,在早期的vue-loader中就已經有這個概念了https://github.com/vuejs/vue-loader/blob/0.6.2/lib/parser.js 這段是早期vue-loader中所使用的parser部分。所以這塊的思想並不算是ng所獨有的,至於後來切換為html parser,猜測原因是為了生成AST方便後續處理(此處如有不對請指出,畢竟這塊還沒有深究過歷史原因)所以對原來的parser方式進行了切換
3.Filters
這個不多解釋了…Filters早在很多string-based template裡面早就被實現過無數次了,也並不是ng第一次帶進來前端使用中的,包括Pipe,不太懂這段使用大大的表情符來自high目的為何…
而且Vue2時期,最開始是取消了Filters的,因為當時為了簡化概念,考慮到Filters完全可以被computed以及methods替換,所以一度取消(後來開發者強烈呼籲之後又加回來了)。
4.組件和指令分離(原作裡面寫了兩個3,估計是大漠窮秋老師過於興奮而造成的筆誤?)
這點上真的要好好說說了,在ng1早期,幾乎是只有controller -&> view的概念的(更多的人是會把這塊理解成module而非component),從來沒有過component的概念,所以很多人為了更好的封裝性,以及恰好ng1可以將directive包裝成directive element,所以早期很多開發者把此特性作為ng1時期的component封裝,以及……怨聲載道(畢竟一直強調的mvvm沒法用嘛~)
反觀Vue,在這個時期就已經把directive與component的概念拆分清楚了,一個vmodel就是一個component,但是估計是為了迎合開發習慣吧,所以此時的vue也有directive element的概念,但是比起ng1那個麻煩的的module來當component來用(據我所知有不少人這麼干過),或者直接使用directive element作為component使用,Vue才是那個最早把這兩者區分開的好么…而且後期Vue取消了directive element,將兩者的職責邊界劃的更加清晰了。
那請問ng1這個時期的事情為什麼不拿出來說,後續ng2中將component概念引入,還不是跟Vue學的,將module封裝成了component的概念,通過更友好的API來實現ng1中只能蛋疼的ng-controller或者ng-view,並且推薦以component組合來完成職責拆分。
綜上,大漠窮秋老師為了在國內推廣ng的這個熱情我們都是有目共睹的,但是作為一個技術人,能否以一種稍微公正,站在技術角度進行合理的分析,來爭取用戶,而不是使用這種惡意誹謗其他框架的阿當式行為來博取眼球???
從來就沒有任何一個框架是能夠完美解決現在所有前端問題的,ng有自己適合的使用場景,Vue也一樣,更好的幫助開發者進行合理的技術選型,架構選型,這難道不是我們真正的職責么?
抄襲這個詞,用在任何一個技術框架上,真的都是一個非常非常負面的辭彙了,我想大漠窮秋老師不會不明白,更何況文中所列舉的「抄襲」,真的構成不上抄襲二字,更通俗一點講,我叫李強,隔壁鄰居新生了個小孩也叫李強,那是不是我要告他抄襲我名字了?
真心希望明天過後不會繼續看到第四篇,第五篇甚至第六篇這樣的文章,大漠窮秋老師在國內推廣ng這份工作的熱情是值得認可的,但是這種方式,我個人認為真的有失水準…
那個匿名說評論一邊倒的建議你去看谷歌大佬給尤雨溪的回復。
比較框架的好與壞不是大漠窮秋老師這麼比較法沒有調查就沒有發言權正如尤雨溪反駁文章所寫,你認為大漠老師在沒有用過vue cli做過哪怕是個demo項目的情況下就寫出這種文章是正確的咯?--------------------------------::----::-------------------------------
感謝提醒,不是大漠老師,是大漠窮秋另外為了方便,我還是把這張圖片貼出來吧。
(圖自尤雨溪微博)誰說Vue抄的是Angular
明明抄的是眼藥水一直喜歡angular的原因,就在於jquery年代裡,能打破原有思維限制,重新定義前端代碼的書寫方式。
早就習慣了JAVA里的分層結構,也曾經在jquery的時候就嘗試自己去寫分層。
雙向綁定並不是打動我的原因,控制器,過慮器,服務,scope這些才是我被angular驚艷到的點。
就像完美的軍刀,可以將複雜的項目拆分的井井有序。
所以很多人說ng2和1不是一個東西,我都覺得完全沒get到點。
angular本質是是對散漫自由的js代碼規範化的重要里程碑。
他對於js的意義很像spring於JAVA,ioc約束了你寫代碼的方式。
其實不只在前端,在JAVA領域早有n多人覺得用spring不開心,寫一個萬年不變的代碼要我定義介面和實現還有配置文件。
只是這些人最後都被淘汰掉或者是轉行做PHP了。
語言的工程化本身對於語言的推進作用非常大。
所以angular對於前端的影響最直接的就是薪水翻三倍比比皆是。
而且再勸一次別再試圖用nodejs來擠進後端了,沒意義。
用go或者java都很贊,沒人要求你必須只能用一種語言走天下。
所以後來的vue如果對於某些點有優化,這是他存在的價值,也是值得敬佩的地方。
說回angular2,很多人說不兼容了,而我第一個感覺就是,更像JAVA了。
1在某種程度上只是一個實驗品,證明這種工程化,分層,解耦,高內聚的方式是可行,而且能夠加快開發速度,提升效率,提升代碼質量的(把所有邏輯全寫進controller的不算會ng)。
而2就是一個徹底的改寫和征服。
所以ng從剛開始就和react以及vue完全不同,後面說的各種全家桶,在某種程度也在證明前端需要一個規範的,工程化的東西。
他帶來的價值是前端工程師上手做項目的成本變低了。
看著要學習各種新東西,實際上這些新框架的學習是多年編程經驗的升華。
所以前端能夠從重複勞動中解放出來。
而這在某種程度上就是編程的意義,當你發現有你重複勞動的地方,你就可以寫代碼來代替他。
所以一點都沒覺得ng2是對ng1的否定,反而是對ng1的高度認可和贊同。
我到現在一直沒想遷移到ng"2的主要原因就在於我不覺得寫js代碼應該有那麼多複雜的前提。
一直在等有另一種解決方案,讓開發項目更簡單更規範。
所以在某種程度上,眼下三個,都不是我期望的東西。
但針對本身所謂抄襲這種明顯有個人傾向的觀點不論,vue就是vue,沒必要去跟angular比,有做的比angular好,那是vue大神的能力,也是推動技術領域前進的動力。
可是為什麼大漠會發表這種言論,瘋狗,盜號,KPI,人品這些辭彙就是vue送給大漠的關鍵詞,就是真正的原因嗎。
一個巴掌拍不響,無風不起浪,事情總有前因和後果,單純片面去看各種爭執,沒什麼意義。
在技術領域上,技術大牛真的特別多,我也各種佩服各路大神。
可是冷嘲熱諷打臉告狀撕逼炫技是科學的么。喬丹說,科比你打敗了我,別人會稱你為打敗喬丹的人,但我打敗你呢,又有誰會記住你的名字?
比各位大神撕逼更讓我覺得不合理的就是各種尾隨跟風的小白。好多人連三個框架是什麼就開始了集火模式。人家大神之間拋開態度人品不論,都是有部分發言權。
可是廣大吃瓜群眾最好不要有這種習慣。這種戾氣才是我覺得很驚訝的。
跟小鮮肉粉絲撕逼沒什麼兩樣。這樣真的不好,不適合自己的職業發展。
人受限於自己的認知和能力,總會有理解偏差的地方。
嗯。這幾天一直手機打字,各種忙,好不容易有點時間。
過段時間忙完了,再好好寫寫從後端角度來說,怎麼看這些問題。
畢竟,angular是後端工程師之手,總歸是有一些自己的角度。
無論對錯,只提供觀點。去年在QCon的時候,尤雨溪正好是我前面一個講題。印象比較深刻的是他提到了vue在不做優化的情況下比React性能更好,而當時我的講題里正好要介紹React的性能調優(哈哈哈)。
當時,尤雨溪順帶提到了一些React性能調優的點。我是很喜歡這點的,如果要對比技術,就事論事。哪兒好,哪兒不好大家聊聊。只要說的合理,作為做技術的人不會覺得冒犯。況且,尤雨溪提到的點,說明他的確是研究過react調優的。(這裡需要再次強調一下,React除非在生產環境下慢才需要性能調優。否則不需要特地進行調優!)
在演講最後QA環節,也有個觀眾問了一樣的問題。問尤雨溪,怎麼看待Vue 1抄AngularJS,Vue 2抄React。我覺得這就是大眾的一個誤區,覺得雙向綁定就是AngularJS,vdom就是React。只是其他框架不太出名罷了。
而關於Vue和AngularJS,Vue的官網有以下描述。並沒有藏著掖著:
Vue 的一些語法和 AngularJS 的很相似(例如 v-if vs ng-if)。因為 AngularJS 是 Vue 早期開發的靈感來源。
最後,作為框架都很優秀。每一個feature都是為了讓開發者和用戶獲得更好的體驗。而作為開發者,選一個自己喜歡又趁手的框架才是最重要的。
編程,是因為喜歡。
印證了最近了解到的一個知識:人做判斷的時候有兩種機制,一種是科學家機制(先有證據再推倒出結論),一種是律師機制(先下結論再尋找證據)。顯然我們看到了啟用律師機制的一個例子~( ̄▽ ̄~)(~ ̄▽ ̄)~
完全是不值一駁的潑髒水。
再來看Vue裡面雙向數據綁定的寫法:
(圖片,略)怎麼樣,是不是長得很像?Angular裡面是ng-model,Vue裡面用的v-model,把前綴ng-換成了v-,插值都是用的雙花括弧(Mustache,八字鬍)語法。
mvvm不是ng首先提出/實現的吧?照這邏輯ng也是抄襲?
這裡要善意地提醒一下Vue,最好去研究一下Facebook的FreeBSD+Patent的開源協議,別把自己抄到大坑裡。
搞笑,好歹看一下vue用的哪家的v-dom實現啊
這裡面有一步操作需要「編譯」開發者自定義的指令(組件),所以,我們需要一個parser,然後我們非常欣喜地看到Vue-2.0.0-alpha.1裡面引入了和AngularJS 1.x同一款開源的htmlparser
這……前端大部分路由庫(比如react-router)在核心的路徑匹配上都用了express用的path-to-regexp ,所以???
通篇除了mvvm設計上常見的共同點就是沒有任何根據的潑髒水,甚至還有如下這種臆測
Vue會不會在未來的某個版本裡面也把Filter改成Pipe呢?
我們拭目以待。
沒有證據的抹黑叫什麼——誹謗
這樣的文章,這樣的推廣,才是對Angular團隊最大的侮辱
為什麼前端技術的爭論會有angular老闆參與進來呢?我看到這個故事隱含的背後有一種味道很不好,那就是「反對我的人就讓你丟飯碗」。一旦開始這麼搞,關於技術的討論就都變味了呀。
先說說自己情況,我用Angularjs1.x開發過一些項目,對使用Angularjs框架本身相對還是比較了解的。我用寫過這樣的一個項目,用來解釋為什麼用前段MVC框架比用jQuery要好,寫這個項目完全是自己的興趣愛好:
github: caoglish/Sorting.Ng.Visualization
演示: http://caoglish.github.io/Sorting.Ng.Visualization/
簡化版:RunJS
一些angular在知乎上的回答:
- caoglish:AngularJS 於前端開發有什麼作用,對比其它框架有何優點?
- caoglish:關於 AngularJS 框架的使用有哪些經驗值得分享?
- caoglish:Web 前端開發需要使用 MVVM 框架嗎?
至於Vue,1.0的時候,剛出來學過一些基礎寫法,不過還沒有機會正式地應用。
所以我並不反對Angularjs,也不反對Google。這個回答只是針對《抄》這片文章本身的的一些看法。
---
不知道大家有沒有笑,但是看到這篇文章我是笑了。倒不是我笑點低,反而是笑點太高,我笑的原因是因為很久沒有看到有人那麼努力的用自己的邏輯把自己給繞進去了。先說說我為什麼笑。同時在讓我再大笑三聲,哈哈哈哈哈哈哈哈~~~~~~~~~
1. Oracle告Google非法使用Java API的名字,Google花了6年時間證明自己沒有剽竊
英文新聞:EFF Applauds Jury Verdict In Favor of Fair Use in Oracle v. Google
中文新聞:Google贏了對甲骨文的官司 使用Java合情合理合法
新聞中說Oracle明確指出Google非法使用的Java API,並且使用了11,000條代碼和37個java包。Google通過法律途徑,花了大約6年的時間,終於讓法官認同了,使用API和這些Java資源是合情合理合法的,並且贏得了官司。而Oracle保留了再次上訴的權利,並且還是明確指責Google剽竊Oracle的代碼和API的版權。另外Oracle要求Google賠償90億美金的非法使用費。那問題來了我們在說Angular,提Google幹啥?因為Angular就是Google維護的,Google對angular全權負責呀。
《抄》這篇文章,問題就在於以google的身份,去指責Vue的工作和Oracle指責Google簡直是如出一轍,我就問問Google,你付了90億元給Oracle,沒有付款跑來這裡玩雙標,豈不是打自己臉,讓大家笑話嗎?
另外,《抄》全篇沒有說vue抄襲angular代碼,而是抄襲了angular的概念,設計和它引用的庫。而Oracle可是明確指出了Google抄襲了API的名字,和Java的API一模一樣。如果按照文章自己的寫法,Google引用API的罪過可是比Vue大多了。
2. Angular最終的代碼庫中包含了不是Angular開發者自己寫的代碼。
搞過前端的都知道,js庫打包,會把所有代碼包括依賴庫一起打包進去,而angularjs一般都是以一個包的形式出現的。所以說,我只要把google發布的angularjs的庫你面找一找,就應該可以找到angular代碼中非angular開發人員的代碼(依賴庫代碼),這樣就能坐實Google非法使用/抄襲第三方代碼的行為了
這是htmlparser的代碼:https://johnresig.com/files/htmlparser.js
這是angular的代碼:https://code.angularjs.org/1.4.9/angular.js
angular的開發人員就把i的聲明位置變化了一下,其他的代碼都一模一樣,是不是?其實這樣用是符合htmlparser使用許可證的,但這樣「抄襲」在《抄》這一篇文章的邏輯中,是不是沒有底線的下作?哈哈哈~~~,這樣雙標努力打自己臉還是可以笑笑的。
3. 我是第一個用htmlparser作為依賴開發的人,所以以後用htmlparser作為依賴都是抄襲我思路的
這個腦路清奇的邏輯,我都怕自己看錯,反覆看了幾遍,才確定是這邏輯。
這個邏輯有兩個大毛病,htmlparser不是Google開發的,而是jQuery之父John Resig開發的,用的是 Mozilla Public License
https://zh.wikipedia.org/zh/Mozilla%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81
MPL既是得到自由軟體基金會承認的自由軟體許可證,也是得到開放源代碼促進會承認的開源軟體許可證。MPL允許在其授權下的源代碼與其他授權的文件進行混合,包括私有許可證。但在MPL授權下的代碼文件必須保持MPL授權,並且保持開源。這樣的條款讓MPL既不像MIT和BSD那樣允許派生作品完全轉化為私有,也不像GPL那樣要求所有的派生作品,包括新的組件在內,全部必須保持GPL。通過允許在派生項目中存在私有模塊,同時保證核心文件的開源,MPL同時激勵了商業及開源社區來參與幫助開發核心軟體。
使用MPL授權的軟體並不受專利的限制,其可以自由使用,出售,並可自由的重新發布。帶有專利代碼的版本仍然可以使用,轉讓,甚至出售,但未經許可則不能修改代碼。此外,MPL並不授予用戶對於開發者商標的使用權。為了滿足MPL的條款限制,用戶必須負擔一些「責任」,主要是關於散發使用MPL授權的軟體。用戶必須確保重新散發的軟體所有源代碼均以MPL授權,即使是以可執行文件的方式提供或是與其他使用專有軟體授權的源代碼結合也一樣。但若跟以GNU通用公共許可協議、GNU寬通用公共許可證、Affero通用公共許可證授權的源代碼結合則是例外。此時開發者則可選用以上三種更加嚴格的條款來授權。
簡單的說就是htmlparser人人可以用,可以打包到自己的軟體中,打包後的軟體,你可以自由處理,但是htmlparser的這段代碼不能你進行私有化,並保持原來的許可證並開源,任何人可以使用。
angular使用了John的代碼,John都沒有說你抄襲,angular反而開始指責Vue你抄襲了我用過的John的代碼?這是什麼邏輯?
當然,也能是angular認為vue看到我用htmlparser,自己也用htmlparser去了,這樣的行為模仿是抄襲,是可恥的。這就是什麼邏輯?John都說了,人人都能用我的代碼,angular能用,vue自然也能用,別的人想用,也能用,John都不禁止了,你angular還要指責用的人?舉個例子,公共廁所開放了,人人可以用,現在A同學做了第一個用廁所的人了,然後看到V同學進來用廁所了,然後就指責V同學說:你是不是看到我用公共廁所,所以學我進來用公廁,你這個模仿叫做抄襲,是無恥行為。哈哈哈~~~
所以《抄》提出了一個邏輯是:我作為第一個使用這個庫的人,別人再來使用這個庫就是抄襲我行為的抄襲,是無恥的。
而這個邏輯最搞笑的地方是什麼?一個Angular推廣人員指責了所有使用Angular框架的人是抄襲Google的無恥之人。哈哈哈~~~,對,他說各位使用Angular的人都是無恥之人那。為什麼?因為Google已經使用了Angular在Youtube on PS3上了。
所以之後所有使用angular框架的人都是抄襲這款Youtbue on PS3的開發者的,他第一個使用angular的框架,如果你們使用angular都是在模仿他呀,你們都是《抄》這篇邏輯下的無恥之人,所以還是趕快放棄使用Angular,難道還等著作者下一篇文章就來說明你們有多麼無恥了。
而我相信Vue的作者是不會這樣指責大家的。
-----------嚴肅分割線----------
這篇文章寫得再多再長也是一無是處。除了上面的邏輯漏洞外,我想談談開源軟體的生態圈是個什麼樣的存在
為什麼呢?這個世界主要有兩個寫作生態圈,一個是技術和產品的生產(寫作)生態圈,一個是知識和學術的生產(寫作)生態圈。這兩個圈子有交集,但是不完全一樣,而且有很大差別
技術和產品的生產(寫作)生態圈
- 小說,電影,專利技術等都是這個生態圈
- 不需要文獻引用
- 多是創造,而不是發現
知識和學術的生產(寫作)生態圈
- 知識,理論,公理,數據記錄,觀察結果,紀錄片等
- 需要大量的文獻引用
- 多是發現和整理,而不是創造
這兩個生態圈都有抄襲和非法使用的版權概念,但是在這兩個圈子內的認定卻是大不一樣。簡單的說吧,如果一個教授,寫了一本關於10進位計算的所有內容。然後就說這10進位的所以相關知識歸自己所有,別人不能使用,使用就是抄襲,是非法,那世界會是什麼個情況?如果譚浩強寫了c語言相關的書籍,那麼說你是不是應該不能再使用c語言了?因為你寫的代碼一定會有和譚浩強書中的代碼模式重合的地方。
所以我的觀點是,開源軟體的世界,更多的是知識和學術的創造(寫作)生態圈,而《抄》的文章更多是以技術和產品的生產(寫作)生態圈的角度來提出批評而帶偏輿論的。
在開源軟體世界中更多是這樣的情況:
1. 重寫輪子
在軟體開發的世界裡,設計模式,mvc,mv*,語法,編譯器,API,演算法等都是知識理論,而不是作品或是技術。在學術生態圈內,如果一個學者覺得一個理論的論證過程太差,可以自己提出一個更好的論證發表,這不但能得到其他學者的佩服,就是理論的原提出者看到,也會佩服並認可的。有著獨特思考,並獨立的論證過程,大家就會承認你,沒人會指著你「盜用」了別人的理論,搶了別人吃飯的飯碗。
當程序員看到一個項目的代碼太差,一怒之下自己重寫輪子,寫出一個更好的輪子的案例比比皆是。如果是開源軟體,尤其是免費的開源許可證,基本上都是鼓勵別人去寫比自己更好的輪子。如果概念,API都一樣,只要代碼完全不一樣,就是原創,社區對這樣的創新都是保持積極態度的。
這裡有兩個著名的前端庫可以說明這個案例:
一個zepto.js的jquery兼容庫,zepto.js基本上所有的api都是和jquery保持一致,而且「大言不慚」的就說我是jquery的代替品,比jquery更小但更快。然而jQuery可沒有說zepto抄襲,反而佩服zepto對移動端編程優化所作的努力。
一個是lodash.js對underscore.js的兼容庫,lodash的作者看到underscore有很多缺陷,就把庫從新自己寫了一遍,並把underscore很多結果不一致的坑填上。後來lodash基本上把underscore的佔有率給全部消滅了,然後兩家人歡樂的合併了:The Big Kahuna: Underscore + Lodash Merge Thread · Issue #2182 · jashkenas/underscore
underscore的原作者對lodash作者對underscore的api的演算法改進表達了感謝。
至於兩個庫的詳細關係,可見:Differences between lodash and underscore
還有一個就是前面說的google用了Oracle的Java的API,然後打官司(最後還是google勝利了)但這個案件是被開源圈當做Oracle的專利碰瓷來看的。Oracle相當不得人心。很顯然,Oracle把Java當作了一個技術和產品的生產(寫作)生態圈的技術產品,而大家認為API是知識和學術的創造(寫作)生態圈的一套知識理論。
另外的例子是現在的所有操作系統都有交集,Linux就是把Unix功能重寫了一遍,但沒有會說Linux抄襲,而只是借鑒。
angular和vue有很多概念上的交集,而vue的確很多地方使用了angular一樣的概念,但是vue是自己用自己的代碼重新實現了這些功能,我們從下圖(庫壓縮後的大小)中看出來,angularjs是550k,而vue只有59k,兩個庫的大小相差了10倍左右,vue用了59k更少的代碼實現了angular的相關功能。這就好比我用更簡單的論證過程論證這個理論的正確性。這在知識和學術的創造(寫作)生態圈不但是大大鼓勵的,而且是值得令人欽佩的,值得學習的行為。
最後說說,在這個圈子裡面,雙向綁定,Pipe,filter這些概念都是理論或者說是知識,人人都可以用自己的方式導一遍,看誰的演算法最好。
2. Angular作為開源軟體,Google是鼓勵大家使用,學習和模仿的。
Angular作為開源軟體,他用的是MIT License,這個許可證的特點是:
詳細介紹 MIT 協議 - 開源中國社區
被授權人有權利使用、複製、修改、合併、出版發行、散布、再授權及販售軟體及軟體的副本。
被授權人可根據程式的需要修改授權條款為適當的內容。 在軟體和軟體的所有副本中都必須包含版權聲明和許可聲明。
這個許可是相當寬鬆的,當然Angular的開源也默認了你可以學習和模仿它的代碼,你甚至可以合併它的代碼到你的商業軟體中,和你的商業軟體一起賣出。
總而言之,Google是默認允許Vue的作者Evan You隨意學習,隨意模仿,如果說有本事寫得比Angular好,算Evan you 有本事Google是不會在意的。Google本身絕對不會說Vue這是抄襲的。另外在前端的圈子,大家對Vue的都是以欽佩加支持的態度去看待Vue的重造輪子。
3. Evan You有Google的背景。
據我的了解,Evan You在Google工作過,也了解Google對開源項目的態度。其實有沒有在Google工作過,對是否是抄襲沒有任何邏輯關係。但我相信,他寫的Vue.js會不會對Google的Angular有抄襲的侵權行為,他應該是有把握的。
結尾,個人看法
我個人覺得,Vue是否抄襲Google的Angular,是要看Google的態度,而不是《抄》這篇文章作者的態度,並且《抄》作者的看法和態度應該是完全可以忽略不計的,如果Google說是抄襲,和Evan You在美國打官司了,那麼我們再來討論Vue是不是抄襲Angular把。
--------
更新2017-08-05:
今天又爆出了Google「抄」snapshot的功能:傳谷歌開quot;抄quot;Snapchat功能:強化新聞內容分發
谷歌如果真要請人開攻擊Vue抄襲Angular,那還真是應該先把自己屁股擦乾淨再說了。在面對神一樣的對手,自己又儘是豬一樣的隊友,遲早藥丸。
反駁《 Vue 從 Angular 裡面抄了哪些東西?》
MVVM(Model-View-ViewModel)的設計模式最早於 2005 年由微軟的 WPF 和 Silverlight 架構師 John Gossman 在他的博客中提到的:Introduction to Model/View/ViewModel pattern for building WPF apps
懵逼了吧?你抄 WPF 就叫應用理論,人家也應用,你就說人家抄襲。
按照你的理論,你整個框架都是抄的。
雙向綁定? knockout 不是比你更早?有人說你是抄襲的了?
推薦閱讀:
※bootstrap+jq+ES5 真的比react/vue/angular+ES6 low嗎?
※為什麼一些公司招前端不想要培訓班出來的人?