提問!你真的懂 前端框架(framework ) 與 庫(library) 怎麼區別嗎?

前言


前端發展速度已經遠遠超出了我們的預計範圍,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結合起來才叫框架,本身只是充當一個前端渲染的庫而已

總結

簡單來說的話,庫和框架相互依賴,我們擁有對庫的控制權,但是使用框架時必須按照框架的規範來進行模塊化的開發。

學如逆水行舟,不進則退
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章