這期來聊一聊前端框架。前端
「if 我是前端 Leader」 是個人一個文章系列,說說我人在其位,欲謀其職的一些點點滴滴感悟。跟前端 Leader 只有那麼一丟丟關係,乾貨很少,但老小皆宜,不要被標題給唬住了。react
文章大綱編程
這應該不是我第一次談‘框架‘了。React 是一個框架嗎? Vue 是一個框架嗎? 嚴格來講不是,它們只是一個視圖解決方案,這裏面算得上是框架的估計只有 Angular。後端
若是說後端框架圍繞着‘數據存儲
’創建起來,那麼前端框架的基礎就是視圖庫,畢竟前端的本質工做就是視圖。這是爲何前端生態圈通常是圍繞着視圖庫展開的。因此說,前端框架的基礎是‘視圖’庫。前端工程化
若是跟後端框架(Rails, Django, Laravel...)比起來,成熟的前端框架其實很少。瀏覽器
什麼是框架?安全
看個例子。打開 UmiJS, 它對本身的描述是:性能優化
可插拔的企業級 react 應用框架前端框架
關鍵字是企業級。什麼是企業級,我本身也說不清楚。我只知道 React 沒有說本身是企業級,Koa、Express 也沒有,然而 Eggjs 和 Umijs 都說它們是企業級框架;Angular 一般也經常跟企業級這個概念聯繫在一塊兒;語言層面有 Java。框架
對比一下他們就知道了,我以爲企業級表示它是 面向企業生產,目的是提升企業的生產力。總結一下有如下特色:
歸根到底仍是成本問題,框架最本質的目的就是要減低各種成本。讓更少的人能夠作更多的事情、且能保證質量、下降維護成本,且能保證不斷優化和演進。
給個定義吧。
前端框架體系的創建離不開前端工程化成熟和‘最佳實踐‘的沉澱’。你能夠認爲框架就是一個整合的方案,提供一個前端‘最佳‘的組合配置。開發者須要作的就是在這個框架約束下填充本身業務代碼。
好處:
壞處:
在 React、Vue 流行以前已經有許多‘前端框架‘,例如 Angular、Ember、Backbone...
它們大部分都受到後端框架的啓發,由於當年也正是後端框架最火的時候,例如 Rails。因此在它們身上會看到不少後端框架的影子。
可是不少後端的開發模式,在前端有點吃不開。更本質的緣由是前端工程化還不成熟,基礎相對薄弱,難以支撐上層建築的發展。
隨着 NodeJS 的普及、JavaScript 語言日益強大,前端工程化逐步深化。 React 這類視圖庫出來後,不少東西被打碎重構, 正所謂百花齊放,欣欣向榮。
圍繞着三大視圖庫各類各樣的庫百花齊放,前端也拓展到了瀏覽器之外的領域。人們都樂於造輪子,使用最新的技術。
因爲發展得太快,所謂的框架/最佳實踐很難被普遍接受,或者很容易就過期了,每一個人每一個團隊更熱衷於創造本身的組合方案,每每也只限於團隊內部。
幾乎每一個團隊都會重複走這樣的路子:穩定技術棧、工程化建設、基礎庫/組件庫建設、沉澱本身的最佳實踐。
團隊沒有必定的工程能力和資源實際上是很難將這些零散的實踐體系化、有機地粘合起來, 長期有效的維護更新更是一件難事, 半途而廢的居多。
如今前端發展開始進入平穩階段。因此大一統的前端‘框架’再一次進入人們的視野。就像 Umi 的做者 雲謙 說的: 如今是工業化時代, 框架像是一個魔法球,把各類技術棧吸到一塊兒,加工後吐給用戶,以此來支撐業務。
框架就是將各類技術棧方案、基礎設施整合起來, 暴露標準的、一致性的接口, 讓開發者專一業務開發。
一個前端開發框架應該涵蓋前端開發鏈路的各個環節。爲約束和簡化業務開發、提供有用的指導。
看看現有‘前端框架‘吧,如今社區上比較流行的‘框架’有 Angular、Next.js、Nuxt、Umi。咱們橫向對比一下它們的一些特性,發現基本上包含這些東西:
跟衣服的標準碼同樣。社區開源的都是通用類型框架,能夠預知的是它們沒有辦法知足全部團隊的要求。咱們每每須要根據本身業務狀況量身定製框架。
爲了應對這些需求,不一樣的框架也有不一樣的應對策略:
咱們也有本身的選擇策略:
我一直堅信專業的人作專業的事。要善於將事情外包出去,騰空本身去作重要的事情。大廠有專門的團隊在作工具、建設基礎設施,社區上開源的框架也由一大幫牛人在維護,並且一般開發迭代很活躍。因此說社區已經有的方案,能夠直接拿來用,不要本身去造輪子,由於你通常沒那麼多精力。
前端開發的時間都花在了哪裏?
對於前端團隊來講,開源前端框架只是一個基礎,只是涉及前端開發的某個很小的部分,它就像一艘船。你要航線穿越大西洋,還有作不少工做、須要緊密高效的協做、可靠的後勤保障、目標和方向、堅決的領導... 路還很長。
如今來聊聊‘廣義的‘框架體系,它集成自身業務,涉及前端開發完整鏈路,關注點從前端應用上升到了前端團隊研發體系。
九層之臺,起於累土。 前端團隊框架體系的建設是一個漸進式的過程,首先從基礎設施開始、接着就是應用開發技術棧組合,再到組件體系,後面是上層的業務開發方案... 上層如下層爲基礎,共同構建出完整的框架體系。
我以爲前端團隊能夠按照這樣的分層結構,分階段來完成這些建設任務。
最基礎的階段,關注前端的基礎設施建設。這個階段已經比較成熟,社區上有不少開箱即用的方案,例如 Umi、Next.js、Vue-CLI、Create-React-App 等等。主要內容有:
在完善基礎設施的同時,團隊的應用開發技術棧組合方案也應該穩定下來,成爲框架的一部分。這些組合也很是重要,它會影響上層的組件建設和業務開發。主要內容有:
組件化如今是前端主流開發模式,這裏還有不少工做能夠作,還有很大的提效空間。
整個組件體系也是一個分層式的結構:
像區塊、頁面生成這些操做須要一些工具輔助。例如:
前端只是研發流程的一環,只是前端自嗨,上下游沒有資源支持,是很難走遠的。
對於前端來講,一般上游指的是 UI、下游指的是後端。
對於 UI。上面說的組件體系,實際上是創建在穩定的、一致的、統一的 UI 設計語言之上的。不然一切都是空談。因此咱們要求 UI 設計團隊要有良好的設計規範、能和前端組件體系綁定並良性迭代。
對於 後端。能夠促進創建更標準的接口範式、封裝通用的服務(有利於業務組件複用)、更深的有業務中臺、BFF...
上下游的打通,對前端生產力的解放也有很是大的促進做用。
AI 自動生成前端代碼? 過高大上了,仍是把話筒交給它吧: 《雙 11 模塊 79.34% 的代碼是怎樣智能生成的?》, 溜了