原文链接:https://blog.csdn.net/weixin_41146340/article/details/79385244
初识框架和库
对于好多初学者来说(例如我),很容易把框架和库搞混淆,分不清它们的具体区别,直到现在我也不是把框架和库搞得很清晰。只是站在初学者的角度,对框架和库的区别有自己的认识和见解。所以今天想在这,给和我一样的初学者剖析下它两者都有哪些区别,以便于我们能更好的在实际开发中应用框架和库。
简单地来分析,我们把框架(Framework)和库(Library,简写Lib)可以用我们生活中的例子来阐述。
假如我们要买一台电脑,框架为我们提供了已经装好的电脑,我们只要买回来就能用,但前提是你必须把整个电脑要买回来。另外,我们还必须根据框架设定的使用规则来使用电脑。虽然这样用户可能轻松许多,但会导致很多人用一样的电脑,或你想自定义某个部件将需要修改这个框架。而库就如自己组装的电脑。库为我们提供了很多部件,我们需要自己组装,如果某个部件库未提供,我们也可以自己做。
库的使用非常灵活,但没有框架方便,这就是框架和库本质的区别。
框架和库的区别:
1.库是将代码集合成的一个产品,供程序员调用。
面向对象的代码组织形式而成的库也叫类库。面向过程的代码组织形式而成的库叫函数库。在函数库中的可直接使用的函数叫库函数。
我们在实际开发中,如果需要用到库,只需要使用库内我们所需的某部分类或函数,然后自己再实现其他部分的功能。直白的说,库为我们提供了很多封装好的函数,看起来零零散散,但是我们使用起来比较灵活,就是哪里需要,我们就取它里面我们所需的某部分,用不到它的地方我们自己来实现。
2.框架则是为解决一个(一类)问题而开发的产品。
框架用户一般只需要使用框架提供的类或函数,即可实现全部功能。
我们在开发中使用框架的时候,框架为我们提供了一条龙服务,一整套的服务,我们调用框架的时候,取的是整个框架,必须使用这个框架的全部代码,即使有些地方的代码我们用不到,但是我们不能挑三拣四。而且,我们使用框架的时候,必须按照框架设定好的使用规则来使用它,相当于你找别人帮忙,你得听人家的话,按人家的吩咐办事,虽然别人帮你时你可能会轻松,但是你必须听人家的,按人家的意思来。这些点可能让有些人觉得框架不是很灵活。
另外,库和框架还有个很大的区别就是: inversion of control. 也就是your code calls a library but a framework calls your code,
卖完关子了,现在我们来细说这个区别。也就是说:当你在调用library的时候,你是按照自己的意愿来control它,比如jQuery(下文还会细说jQuery)。而,对于framework, 那么control就是倒转过来了,是它在control你,比如bootstrap。
小结:
上面我们都说过了,使用库的时候我们比较随意,想用哪取哪,哪块好用哪,而且把它拿过来可以按照我们的编写意愿来用。但是框架就不一样,我们好像被它控制着,要使用它,就得听它的,按照它的规则来,即使它某些地方我们用不到,或者不喜欢,也不能说什么。
扩展:
我们来把上面遗留的jQuery说清楚。jQuery 的定位显得棱模两可,可以说是库,也可以说是框架,为什么这么说呢?
官方的来说,框架也算是库的一种,但倾向于重量级一些,倾向于提供整套的解决方案,倾向于创造一些需要你来遵守的规则和范例。而JQuery属于Java家族,它是一种快捷,小巧,功能丰富的JavaScript库。
所以,你可以把它当成框架来使用。以jQuery为基础架构出你自己的框架。因此我们没必要在这个问题上纠结,我就当它是库,但是可以当框架来用。
还有一点要说的是,JQuery提高的是你的工作效率,并不是代码的运行效率。它只是减少了你需要敲的代码量,但是它的执行效率不一定有原生JS的效率高,除非你原生JS写的特别差。
在实际中,像angular、backbone、vue就属于框架,而jQuery、react、underscore就是库,
就单拿React来说吧,官网自己也说了它是库:
React is a declarative, efficient, and flexible JavaScript library for building user interfaces.
因为框架是有一套解决方案的,React就是纯粹写UI组件的 没有什么异步处理机制、模块化、表单验证这些。React和react-router, react-redux结合起来才叫框架,而React本身只是充当一个前端渲染的库而已。(暂完)