三大前端框架技术选型对比

1、ReactJS简介

  • React 起源于 Facebook 的内部项目就在2013年5月开源了。
  • 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具。

2、 前端三大主流框架

  • Angular.js:出来最早的前端框架,学习曲线比较陡,NG1学起来比较麻烦,NG2开始,进行了一系列的改革,也开始启用组件化了;在NG中,也支持使用TS(TypeScript)进行编程;
  • Vue.js:最火的一门前端框架,它是中国人开发的,对我们来说,文档要友好一些;
  • React.js:最流行的一门框架,因为它的设计很优秀;

3、React与vue.js的对比

  • (1)组件化方面
    什么是模块化:从 代码 的角度,去分析问题,把我们编程时候的业务逻辑,分割到不同的模块中来进行开发,这样能够方便代码的重用
    什么是组件化:从 UI 的角度,去分析问题,把一个页面,拆分为一些互不相干的小组件,随着我们项目的开发,我们手里的组件会越来越多,最后,我们如果要实现一个页面,可能直接把现有的组件拿过来进行拼接,就能快速得到一个完整的页面, 这样方便了UI元素的重用组件是元素的集合体
    组件化的好处:把页面的不同部分拆分成独立的组件,然后在不同页面就可以共享这些组件,避免重复开发,提高开发效率;
    Vue是如何实现组件化的:.vue 组件模板文件,浏览器不识别这样的.vue文件,所以,在运行前,会把 .vue 预先编译成真正的组件;

    • template: UI结构
    • script: 业务逻辑和数据
    • style: UI的样式

    React如何实现组件化:在React中实现组件化的时候,根本没有 像 .vue 这样的模板文件,而是,直接使用JS代码的形式,去创建任何你想要的组件;

    • React中的组件,都是直接在 js 文件中定义的;
    • React的组件,并没有把一个组件 拆分为 三部分(结构、样式、业务逻辑),而是全部使用JS来实现一个组件的;(也就是说:结构、样式、业务逻辑是混合在JS里面一起编写出来的)
  • (2)开发团队方面
    React是由FaceBook前端官方团队进行维护和更新的;因此,React的维护开发团队,技术实力比较雄厚;
    Vue:第一版,主要是有作者 尤雨溪 专门进行维护的,当 Vue更新到 2.x 版本后,也有了一个小团队进行相关的维护和开发;

  • (3)社区方面
    在社区方面,React由于诞生的较早,所以社区比较强大,一些常见的问题、坑、最优解决方案,文档、博客在社区中都是可以很方便就能找到的;
    Vue是近两年才诞生开源出来的,所以,它的社区相对于React来说,要小巧一些,所以,可能有的一些坑,没人踩过;

  • (4)移动APP开发体验方面
    Vue,结合 Weex 这门技术,提供了 迁移到 移动端App开发的体验(Weex,目前只是一个 小的玩具, 并没有很成功的 大案例;)
    React,结合 ReactNative,也提供了无缝迁移到 移动App的开发体验(RN用的最多,也是最火最流行的);

4、 为什么要学习React?

(1)设计很优秀,是基于组件化的,方便我们UI代码的重用;
(2)开发团队实力强悍,不必担心短更的情况;
(3)社区强大,很多问题都能找到对应的解决方案;
(4)提供了无缝转到 ReactNative 上的开发体验,让我们技术能力得到了拓展;增强了我们的核心竞争力

5、React中几个核心的概念

  • 虚拟DOM(Virtual Document Object Model)
    DOM的本质是什么:就是用JS表示的UI元素(就是用JS对象模拟DOM树)
    DOM和虚拟DOM的区别:
    (1) DOM是由浏览器中的JS提供功能,所以我们只能人为的使用 浏览器提供的固定的API来操作DOM对象;
    (2)虚拟DOM:并不是由浏览器提供的,而是我们程序员手动模拟实现的,类似于浏览器中的DOM,但是有着本质的区别;
    (3)虚拟DOM的目的:为了实现虚拟DOM的高效更新
    三大前端框架技术选型对比_第1张图片

  • Diff算法
    (1) tree diff:新旧DOM树,逐层对比的方式,就叫做 tree diff,每当我们从前到后,把所有层的节点对比完后,必然能够找到那些 需要被更新的元素;
    (2)component diff:在对比每一层的时候,组件之间的对比,叫做 component diff;当对比组件的时候,如果两个组件的类型相同,则暂时认为这个组件不需要被更新,如果组件的类型不同,则立即将旧组件移除,新建一个组件,替换到被移除的位置;
    (3)element diff:在组件中,每个元素之间也要进行对比,那么,元素级别的对比,叫做 element diff;
    (4) key:key这个属性,可以把 页面上的 DOM节点 和 虚拟DOM中的对象,做一层关联关系

你可能感兴趣的:(前端工程师)