如何区分前端库与框架?例如 jQuery和Vue?

    前端发展速度已经远远超出了我们的预计范围,JS迅速的流行,前端基于JS的框架(frameworks)/库(librarys)更是层出不穷,且各自都有其自身的优势以及劣势,有些是向开发使用者提供整套的服务,比如MVC一整套,有些则是专注于某一个点,比如专注于dom操作或异步请求;那么到底什么是前端框架,什么是库却迷惑大部分初学者?

库(Library)是一系列预先编写好的代码集合,供开发者在编程中调用,大大减少重复工作量。 库的概念很宽泛。程序员第一次输出hello world用的printf就来自C语言标准库; 从npm、Maven、Nuget下载的包都是库; 库更多是一个封装好的特定的集合,提供给开发者使用,而且是特定于某一方面的集合(方法和函数),库没有控制权,控制权在使用者手中,在库中查询需要的功能在自己的应用中使用,我们可以从封装的角度理解库

框架顾名思义就是一套架构,会基于自身的特点向用户提供一套相当于叫完整的解决方案,而且控制权的在框架本身,使用者要找框架所规定的某种规范进行开发。框架(Framework)是库的一种。很多人会把框架和普通库的区别仅仅理解为规模和复杂度,其实不然。jQuery的规模够大了,但仍然是库,不是框架。框架的最大特征是它会接管程序的主控制流,开发者只需编写业务逻辑代码,具体执行工作由框架来调用。实践中经常会用到控制反转(IoC)以及模板类继承等方式。

框架与库之间最本质区别在于控制权:you call libs, frameworks call you(控制反转)

同时用jQuery和Vue没问题,因为jQuery是库可以包含在Vue框架中;同时使用Vue和React就不行,因为两个都是框架,主控制流只能有一个。

在实际中,像angular、backbone、vue就属于框架,而jQuery、react、underscore就是库,在前者中我们完全可以自由的使用后者,同时也可以没有前者的基础之上使用后者,都是很自由,控制权始终在我们的手中,但是使用框架时候就必须按照它的规范来进行模块化的开发;

可能有人会问react也是库么?的确它就是一个库,为什么呢? 答案:React和react-router, react-redux结合起来才叫框架,本身只是充当一个前端渲染的库而已;

你可能感兴趣的:(前端,webgl,3d,LOD)