我們所說的前端框架與庫的區別?

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

開頭有說到框架是有一套解決方案的,react就是純粹寫UI組件的 沒有什麼非同步處理機制、模塊化、表單驗證這些

如果你讀到這篇文章,希望能對理解框架與庫有一定的幫助,另外如果文章有不對的地方還望指出,會及時修改;

以下是參考鏈接:

What is the difference between a framework and a library?

Framework vs. Toolkit vs. Library

本文首發於知乎
推薦閱讀:

如何解讀Facebook的這款疑似Virtual DOM專利?
比如說我想做的事情都早已經有人做過了,我再做的意義是什麼?比如學前端,有很多前端高手,我為什麼還要學?
React作為時下最熱的前端框架,各位有什麼經驗分享下嗎?

TAG:前端框架 | 前端开发框架和库 |