摘要:只是站在初學(xué)者的角度,對(duì)框架和庫的區(qū)別有自己的認(rèn)識(shí)和見解。庫的使用非常靈活,但沒有框架方便,這就是框架和庫本質(zhì)的區(qū)別??蚣芎蛶斓膮^(qū)別庫是將代碼集合成的一個(gè)產(chǎn)品,供程序員調(diào)用。
什么是框架和庫? 初識(shí)框架和庫
對(duì)于好多初學(xué)者來說(例如我),很容易把框架和庫搞混淆,分不清它們的具體區(qū)別,直到現(xiàn)在我也不是把框架和庫搞得很清晰。只是站在初學(xué)者的角度,對(duì)框架和庫的區(qū)別有自己的認(rèn)識(shí)和見解。所以今天想在這,給和我一樣的初學(xué)者剖析下它兩者都有哪些區(qū)別,以便于我們能更好的在實(shí)際開發(fā)中應(yīng)用框架和庫。
簡(jiǎn)單地來分析,我們把框架(Framework)和庫(Library,簡(jiǎn)寫Lib)可以用我們生活中的例子來闡述。
假如我們要買一臺(tái)電腦,框架為我們提供了已經(jīng)裝好的電腦,我們只要買回來就能用,但前提是你必須把整個(gè)電腦要買回來。另外,我們還必須根據(jù)框架設(shè)定的使用規(guī)則來使用電腦。雖然這樣用戶可能輕松許多,但會(huì)導(dǎo)致很多人用一樣的電腦,或你想自定義某個(gè)部件將需要修改這個(gè)框架。而庫就如自己組裝的電腦。庫為我們提供了很多部件,我們需要自己組裝,如果某個(gè)部件庫未提供,我們也可以自己做。
庫的使用非常靈活,但沒有框架方便,這就是框架和庫本質(zhì)的區(qū)別。
框架和庫的區(qū)別:1.庫是將代碼集合成的一個(gè)產(chǎn)品,供程序員調(diào)用。面向?qū)ο蟮拇a組織形式而成的庫也叫類庫。面向過程的代碼組織形式而成的庫叫函數(shù)庫。在函數(shù)庫中的可直接使用的函數(shù)叫庫函數(shù)。
我們?cè)趯?shí)際開發(fā)中,如果需要用到庫,只需要使用庫內(nèi)我們所需的某部分類或函數(shù),然后自己再實(shí)現(xiàn)其他部分的功能。直白的說,庫為我們提供了很多封裝好的函數(shù),看起來零零散散,但是我們使用起來比較靈活,就是哪里需要,我們就取它里面我們所需的某部分,用不到它的地方我們自己來實(shí)現(xiàn)。
2.框架則是為解決一個(gè)(一類)問題而開發(fā)的產(chǎn)品。框架用戶一般只需要使用框架提供的類或函數(shù),即可實(shí)現(xiàn)全部功能。
我們?cè)陂_發(fā)中使用框架的時(shí)候,框架為我們提供了一條龍服務(wù),一整套的服務(wù),我們調(diào)用框架的時(shí)候,取的是整個(gè)框架,必須使用這個(gè)框架的全部代碼,即使有些地方的代碼我們用不到,但是我們不能挑三揀四。而且,我們使用框架的時(shí)候,必須按照框架設(shè)定好的使用規(guī)則來使用它,相當(dāng)于你找別人幫忙,你得聽人家的話,按人家的吩咐辦事,雖然別人幫你時(shí)你可能會(huì)輕松,但是你必須聽人家的,按人家的意思來。這些點(diǎn)可能讓有些人覺得框架不是很靈活。
另外,庫和框架還有個(gè)很大的區(qū)別就是: inversion of control. 也就是your code calls a library but a framework calls your code,
賣完關(guān)子了,現(xiàn)在我們來細(xì)說這個(gè)區(qū)別。也就是說:當(dāng)你在調(diào)用library的時(shí)候,你是按照自己的意愿來control它,比如jQuery(下文還會(huì)細(xì)說jQuery)。而,對(duì)于framework, 那么control就是倒轉(zhuǎn)過來了,是它在control你,比如bootstrap。
小結(jié):上面我們都說過了,使用庫的時(shí)候我們比較隨意,想用哪取哪,哪塊好用哪,而且把它拿過來可以按照我們的編寫意愿來用。但是框架就不一樣,我們好像被它控制著,要使用它,就得聽它的,按照它的規(guī)則來,即使它某些地方我們用不到,或者不喜歡,也不能說什么。
擴(kuò)展:我們來把上面遺留的jQuery說清楚。jQuery 的定位顯得棱模兩可,可以說是庫,也可以說是框架,為什么這么說呢?
官方的來說,框架也算是庫的一種,但傾向于重量級(jí)一些,傾向于提供整套的解決方案,傾向于創(chuàng)造一些需要你來遵守的規(guī)則和范例。而JQuery屬于Java家族,它是一種快捷,小巧,功能豐富的JavaScript庫。
所以,你可以把它當(dāng)成框架來使用。以jQuery為基礎(chǔ)架構(gòu)出你自己的框架。因此我們沒必要在這個(gè)問題上糾結(jié),我就當(dāng)它是庫,但是可以當(dāng)框架來用。
還有一點(diǎn)要說的是,JQuery提高的是你的工作效率,并不是代碼的運(yùn)行效率。它只是減少了你需要敲的代碼量,但是它的執(zhí)行效率不一定有原生JS的效率高,除非你原生JS寫的特別差。
在實(shí)際中,像angular、backbone、vue就屬于框架,而jQuery、react、underscore就是庫,
就單拿React來說吧,官網(wǎng)自己也說了它是庫:
React is a declarative, efficient, and flexible JavaScript library for building user interfaces.
因?yàn)榭蚣苁怯幸惶捉鉀Q方案的,React就是純粹寫UI組件的 沒有什么異步處理機(jī)制、模塊化、表單驗(yàn)證這些。React和react-router, react-redux結(jié)合起來才叫框架,而React本身只是充當(dāng)一個(gè)前端渲染的庫而已。(暫完)
筆者作為一個(gè)新人,翻看和欣賞了大神的筆記后,自己總結(jié)加工,發(fā)表一下自己淺薄的見解,如果哪里說得不對(duì),希望讀者能提出批評(píng)和指正,本人表示誠(chéng)心的感謝。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92426.html
摘要:但是在不同的項(xiàng)目中不同的維度權(quán)重時(shí)不一樣的沒有統(tǒng)一的原則去解決一個(gè)問題要自身實(shí)踐來測(cè)試選擇原則妥適性原則避免過渡實(shí)現(xiàn),暫時(shí)用一些,現(xiàn)在還可能用不到,或者用的不多庫來滿足當(dāng)前需求。 這個(gè)兩天看了張克軍(豆瓣前端專家、前端布道師)在FEDAY的主題分享覺得對(duì)中大型項(xiàng)目開發(fā)很有幫助所以在這里分享給大家后面會(huì)有視頻地址。下面介紹重點(diǎn)內(nèi)容。這里分享的項(xiàng)目是指公司實(shí)際產(chǎn)品開發(fā),協(xié)同人數(shù)比較多,更加...
摘要:也就是說當(dāng)你在調(diào)用的時(shí)候,你按照自己的意愿來他比如??蚣芤竽阌媚撤N形式去寫代碼,比如遵照的約定,等等。一個(gè)簡(jiǎn)單的分辨方式引入一個(gè)依賴,如果要對(duì)架構(gòu)進(jìn)行修改的,那么就算是框架如果無需修改原有架構(gòu),那么就算庫。 when you call a library, you are in control. But with a framework, the control is inverte...
摘要:本文簡(jiǎn)要回顧相關(guān)概念和用法。相比之下已是明日黃花。分別對(duì)應(yīng)的命令是根據(jù)關(guān)鍵字查找依賴包,例如查找本人發(fā)布的包。作為目前包依賴管理的最佳工具,值得每一位開發(fā)人員掌握。 轉(zhuǎn)載請(qǐng)注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) session 數(shù)據(jù)庫操作 加解密 Composer是PHP...
閱讀 1751·2023-04-25 23:43
閱讀 932·2021-11-24 09:39
閱讀 731·2021-11-22 15:25
閱讀 1729·2021-11-22 12:08
閱讀 1099·2021-11-18 10:07
閱讀 2083·2021-09-23 11:22
閱讀 3355·2021-09-22 15:23
閱讀 2512·2021-09-13 10:32