這是偶五群有人提的問題。
乍一看是,某個框架一出來,沒什么人氣,只好什么都自己做, 不斷補全自己,才可能與已經武裝到牙齒的現有框架相較量。比如說jQuery初期,John Resig也自己寫了N多插件來充門面。
但細想不是這樣的,絕對大多數人還是喜歡一體化的解決方案,要來全棧式;DIY這種東西,東拼西湊不是一般人能玩不得過來,又或者是沒這財力要購得這一整套解決方案。 這情況,就相當於jQuery 加 一打插件 與 EXT的區別。
良莠不齊的插件還有許多問題,這個我就不展開了,這也是EXT為什么收費也能活得這么滋潤的緣故。
這是還是同質的產品的比較,如果不同質,那更需重頭打造一遍了。因為無論用哪套方案,我們都要求它們能滿足我們業務開發遇到的各種組件, 插件,控件。。。。
早些年是Prototype.js與jQuery,它們雙方以不同的方式來打造自己的世界。Prototype.js與OO走得近一點,能完美把后端那一套搬過來,利用設計模式,迅速堆砌它的UI庫。 基於Prototype.js的收費控件異常興旺。而jQuery則是以DSL面目出現,即便沒有控件,也能通過一次又一次爽快的鏈式操作,把設計稿還原出來。在這世上,新丁與菜鳥總是最多,因此jQuery的份額不斷上漲,不斷從Prototype.js那邊搶走高級開發者,這才漸漸有了一些與媲美Prototypejs UI庫的東西出來。 jQuery ui就是走大而全的道路,打敗Prototype的大而全的UI框架。
現在時下流行的MV*框架,也基本沿着這老路,來擴張自己的勢力。
如果拿人類的歷史來比喻。Prototype.js就是奴錄社會,夏商周經過八百年的發展,什么東西也有了。 但最后還是被封建社會取代了。jQuery就是好比封建社會。無論是什么社會,人們還是一樣要過活,因此必要的生產還要進行。 但依借的工具已經不一樣,在遠古,青銅珍貴得不得了,多是木器石器;封建時代,青銅就非常普通,但人們更加喜歡用更耐用的鐵器。 Prototype.js用到手那一套東西,比如選擇器,特性偵測,事件系統,類, jQuery也一樣不少,但人家的選擇器不只有ID與類與標簽,將CSS3那一套都囊括了。 特性偵測也是如此,並划分一個模塊來專門判定它們,依靠它們實現門面模式。事件系統比之前所有框架的更龐大,達到1500行的規模,什么自定義事件,IE專有事件,事件代理,事件派發都支持了。 類作為代碼組織的一個單元模塊,jQuery也在用,但它更喜歡使用IIFE來包裝成一個模塊。此外,Promise,緩存系統,無new實例化,通過innerHTML批量生成節點是先代所沒有的。這世界總是進步的。
MVVM呢?對不起,我不想提MVC。這是資本社會了。雙向綁定實現的同步機制,像工業大革命那樣極大地提高生產效率,代碼的維護性。 由於是大生產,就有大生產的范兒。java早進入這時代了,留下了23個設計模式與分層架構與IoC等經驗。了解WPF框架的人都知道,就一個簡單的dependent property,就把設計模式這本書里面的模式用掉一大半了。分析WPF框架代碼的話,簡直就是看一本設計模式的百科全書。這也一一應用到前端MVVM!knockoutjs, avalonjs這些框架里面閃爍着后端長期熔鑄的晶華!
並不是說舊的東西就一無是處。當你有了更好的東西,你還願意用舊的工具嗎?在框架發展的早期,還沒有大而全,就不得不用舊的生產方式來應付。像angularjs就直接把bootstrap那一套東西包一層,做成它的指令。 小的東西還能包裝得好, 像grid這樣的大控件,想完全嵌入它的觸發機制就處處漏底了。
而且時代不同了,人們利用新的工具重新打造來得更快。在古代,人們打造一把好刀需要長年累月。 現在有了3D打印,坦克一個月就造出來。另從殺傷力來說,后者威力更大。
因此與其說他們是走老路子,不如說它們在重新打造世界,一個嶄新的更好的世界!
PS:大而全並不是最佳方式,以微核多插件的方式不斷提高暴光率,形成生態圈或許會更好。但馬太效應通常不會讓新生框架一下得逞(當前王者會圈占大量資源與人才),因此從JAVA幾大框架的歷史迭代來看,也只有不斷膨脹膨脹,直到大家都看到它,才有機會建立自己的生態圈,自己的王國,自己的世界。