前言
前端發展速度已經遠遠超出了我們的預計範圍,JS迅速的流行,前端基於JS的框架(frameworks)/庫(librarys)更是層出不窮,且各自都有其自身的優勢以及劣勢,有些是向開發使用者提供整套的服務,比如MVC一整套,有些則是專注於某一個點,比如專注於dom操作或異步請求;
最近被問到這個問題,其實到我被問到這問題之前,都沒有認真的考慮過它們的區別,處於學習以及好奇心理,查閱了相關文檔,其中包括知乎、stackoverflow等相關問題和文章,總算是略知一二,並以此寫下來分享給夥伴們。
框架與庫之間最本質區別
在於控制權:you call libs, frameworks call you(控制反轉)
前端框架與庫的區別
庫: 庫更多是一個封裝好的特定的集合,提供給開發者使用,而且是特定於某一方面的集合(方法和函數),庫沒有控制權,控制權在使用者手中,在庫中查詢需要的功能在自己的應用中使用,我們可以從封裝的角度理解庫;
框架: 框架顧名思義就是一套架構,會基於自身的特點向用戶提供一套相當於叫完整的解決方案,而且控制權的在框架本身,使用者要找框架所規定的某種規範進行開發。
舉個栗子
我們嘗試舉個例子:你想烹飪一條魚,這時你需要一些原料,比如油、鹽、醋、蔥、香料以及烹飪工具等,同時魚也是你需要的主要材料,當你聚齊所有材料時,再經過烹飪就得到成品;
現在我們進行對比,其中油、鹽、醋、蔥、香料以及烹飪工具
和魚
其實就是庫,組合到一起就成了框架
,成品就是最終開發好的應用,或者這樣能是你更好裏的理解框架與庫之間的區別;由此我們可以看到,其實框架和庫關係還是很緊密的,他們以聚合的形式讓我們在所要開發的應用中使用;現在嘗試理解一下兩圖下圖:
實際情況
在實際中,像angular、backbone、vue就屬於框架,而jQuery、react、underscore就是庫,在前者中我們完全可以自由的使用後者,同時也可以沒有前者的基礎之上使用後者,都是很自由,控制權始終在我們的手中,但是使用框架時候就必須按照它的規範來進行模塊化的開發;
疑問
可能有人會問react也是庫麼?的確它就是一個庫,爲什麼呢?
React和react-router, react-redux結合起來才叫框架,本身只是充當一個前端渲染的庫而已
總結
簡單來說的話,庫和框架相互依賴,我們擁有對庫的控制權,但是使用框架時必須按照框架的規範來進行模塊化的開發。
學如逆水行舟,不進則退