2015前端各大框架比较(angular,vue,react,ant)

前端流行框架大比拼

  • angular
  • vue
  • react
  • ant-design

angularjs

angular是个MVVM的框架。针对的是MVVM这整个事。angular的最主要的场景就是单页应用,或是有大量数据绑定的情况。

特性

  • 双向数据绑定
  • ioc依赖注入
  • 指令

上面这几点用起来确实很爽,随便指定个区域,配一个controller,然后里面的东西就都在scrope里了,确实很方便

如果各位想看,参见 https://github.com/i5ting/ionic_ninja/blob/master/angularjs/angularjs_sang.md

其实angular最好的实践是ionicframework的,读读ionic源码,才知道啥叫规范

vue

vue是尤同学写的一个MVVM中ViewModel中的库。是针对MVVM中的一层。应用的场景比较广,只想用vue功能的话就用。

  • Extendable Data bindings
  • Plain JS object models
  • API that simply makes sense
  • Build UI by composing components
  • Mix & matching small libraries

这个项目是非常活跃的,90后同学的精力很旺盛啊。

从最初的ViewModel做到今天的各种功能,做加法还真是挺可怕的事儿。

它的guide上说可以做Building Larger Apps,见http://vuejs.org/guide/application.html

各种路由,组件啥的都有,的确很强大

但是很多人都搞不定的,首先这么多概念就玩死一票人了,其次,它有太多东西需要自己去实现,就是可以复用的东西太少了,如果是小项目玩玩无所谓,如果是大的项目,水平一般的程序员是很难hold住的。

这就好比react出来,很好,但没有啥可复用的东西,写来是非常痛苦,所以在下面我介绍了react之后,给出了一个更好的基于react的解决方案。

reactjs

https://github.com/facebook/react

Virtual DOM

Virtual DOM是reactjs的最核心概念,我拷贝一段来说明它

在Web开发中,我们总需要将变化的数据实时反应到UI上,这时就需要对DOM进行操作。而复杂或频繁的DOM操作通常是性能瓶颈产生的原因(如何进行高性能的复杂DOM操作通常是衡量一个前端开发人员技能的重要指标)。

React为此引入了虚拟DOM(Virtual DOM)的机制:在浏览器端用Javascript实现了一套DOM API。基于React进行开发时所有的DOM构造都是通过虚拟DOM进行,每当数据变化时,React都会重新构建整个DOM树,然后React将当前整个DOM树和上一次的DOM树进行对比,得到DOM结构的区别,然后仅仅将需要变化的部分进行实际的浏览器DOM更新。

而且React能够批处理虚拟DOM的刷新,在一个事件循环(Event Loop)内的两次数据变化会被合并,例如你连续的先将节点内容从A变成B,然后又从B变成A,React会认为UI不发生任何变化,而如果通过手动控制,这种逻辑通常是极其复杂的。尽管每一次都需要构造完整的虚拟DOM树,但是因为虚拟DOM是内存数据,性能是极高的,而对实际DOM进行操作的仅仅是Diff部分,因而能达到提高性能的目的。这样,在保证性能的同时,开发者将不再需要关注某个数据的变化如何更新到一个或多个具体的DOM元素,而只需要关心在任意一个数据状态下,整个界面是如何Render的。

说那么多你可能都没明白,上例子

helloworld

var HelloMessage = React.createClass({
  render: function() {
    return <div>Hello {this.props.name}</div>;
  }});React.render(
  <HelloMessage name="John" />,
  document.getElementById(‘container‘));

首先,这是一种 HTML-like 的语法,叫jsx,可以理解成coffee,typescript之类的,需要编译

核心就是React.render,说明这个组件放在什么地方,比如上面的例子就是

<div id=‘container‘>
  ...</div>

这样页面就可以拆分成n个小块,每块各自为政,即所谓的组件化(也就积木一样)

再来个复杂点的,下面给出的是带有状态的组件

var Input = React.createClass({
  getInitialState: function() {
    return {value: ‘Hello!‘};
  },
  handleChange: function(event) {
    this.setState({value: event.target.value});
  },
  render: function () {
    var value = this.state.value;
    return (
      <div>
        <input type="text" value={value} onChange={this.handleChange} />
        <p>{value}</p>
      </div>
    );
  }
});

React.render(<Input/>, document.body);

视图相关的3个概念

  • Props(属性,就是element上的attrs,换个名字property,变成复数,即props)
  • State(写过view组件的基本都会知道,按钮有三态,Normal,Highlight,Selected,包括extjs,jquery里的大部分ui框架都是有状态的。)
  • Event(其实还应该算一个就是dom事件,上面的例子就把onChange的handler编译后的handleChange方法,这要感谢jsx)

了解了上面这些,就可以写代码了,因为

  • 属性,解决了view的定义问题,即语义描述
  • 状态,是view的有穷状态机,根据状态决定ui和行为
  • 事件,是view里元素的行为

单独的view的话,实际上上面的东西已经足够了,但是往往我们用的时候是view和viewController一起用的。

但reactjs里并没有却分这个,也就是说view和controller都在组件里,比如ios的但是往往我们用的时候是view和viewController里就有很多生命周期方法,这些在reackjs里也被实现了

组件的生命周期

组件的生命周期,另外的名字是状态回调,和上面讲的状态的唯一差别,上面的状态是它里面的元素,而组件的生命周期是它自己

组件的生命周期分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。

  • componentWillMount()
  • componentDidMount()
  • componentWillUpdate(object nextProps, object nextState)
  • componentDidUpdate(object prevProps, object prevState)
  • componentWillUnmount()

此外,React 还提供两种特殊状态的处理函数。

  • componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
  • shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

FAQ

1)很多人最常问的问题:比如和jQuery集成可以吗?

reactjs很小,并没有jq提供的功能,可以说它们是互补的,可以结合着使用

2)react比angular好用吗?

reactjs是组件化的最佳实践,但angularjs的mvvm等好用功能,它是没有的,所以更好用说不上,姑且可以认为各有千秋吧

总结

总结一下,关于reactjs,我没有讲virtual dom,而是主要讲了4个概念

  • 属性
  • 状态
  • 事件
  • 生命周期

如果你掌握了这4点,实际上就已经可以很好的使用reactjs了,比如一般view是要和ajax放到一起用的,这时候,只要在组件的生命周期里处理即可,实际上也还是上面的东西,此处就不罗嗦了。

todo(reactjs高级篇)

  • 加点 路由和 数据单向流的 东西吧
  • 或者 是服务器端渲染的 数据请求逻辑 什么的
  • 如果能用redux 和express做个例子 那就更好了

ant-design

https://github.com/ant-design

特性

  • 提炼自企业级后台产品的交互语言和视觉风格。
  • 丰富实用的 React UI 组件。
  • 基于 React 的组件化开发模式。
  • 背靠 npm 生态圈。
  • 基于 webpack 的调试构建方案,支持 ES6。

我们来换一种说法

  • 基于react组件化
  • 代码在npm里,做到模块化
  • 通过webpack构建,更灵活

至于说es几,那只是噱头而已

通过npm,可以更好的和nodejs结合,利用node的生态来扩展,其实bower等也类似,但对package.json不友好,所以我是很看好这种方式的。

以后js大一统,npm就不在只是nodejs package manager的,而是js package manager

另外它的界面设计的很好,模块化的做的也很好,我非常喜欢,唯一的缺点是它对nodejs的版本要求太高了,会让一小部分人不适应的。

全栈之路

  • js是首选
  • rails也不错
  • 其他,要折腾很久

总结

大家可能都有的疑问,这么技术非常好,我的项目要不要上呢?

先从项目维度看

  • 小项目,无所谓,可以尝鲜,填坑和重写一样简单
  • 大项目,伤不起啊,如果不成熟或者无良好生态,当慎重,经得起诱惑

从人的维度看

  • 牛人,无所谓,反正时间和能力都能挤出来,能学到很多东西,但也也要打进去很多夜晚
  • 其他人,量力而行

我不会在公司项目里使用vue,但我赞成evan的做法,虽然不提倡造轮子,但问题反过来看,它又何尝不是一个技术人的热爱呢?

生命不息,折腾又怎会停止,前端或者说js领域的变化越来越快,大家准备好迎接可能是机遇也可能是灾难的明天吧,加油!

时间: 2024-10-24 11:14:53

2015前端各大框架比较(angular,vue,react,ant)的相关文章

2015前端组件化框架之路

特别声明:本文转自@民工精髓的<2015前端组件化框架之路>.谢谢@民工精髓的分享!著作权归作者所有. 编辑推荐: 掘金是一个高质量的技术社区,从 CSS 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货. 点击链接查看最新前端内容,或到各大应用市场搜索「 掘金」下载APP,技术干货尽在掌握中著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.原文: http://www.w3cplus.com/components-in-webapp.html ? w

2015前端组件化框架之路(转)

https://github.com/xufei/blog/issues/19 1. 为什么组件化这么难做 Web应用的组件化是一个很复杂的话题. 在大型软件中,组件化是一种共识,它一方面提高了开发效率,另一方面降低了维护成本.但是在Web前端这个领域,并没有很通用的组件模式,因为缺少一个大家都能认同的实现方式,所以很多框架/库都实现了自己的组件化方式. 前端圈最热衷于造轮子了,没有哪个别的领域能出现这么混乱而欣欣向荣的景象.这一方面说明前端领域的创造力很旺盛,另一方面却说明了基础设施是不完善的

前端两大框架 vue 和 react 的区别

1. 设计思想 vue: vue的官网介绍说vue是一种渐进式框架,采用自底向上增量开发的设计: react: 采用函数式编程,推崇纯组件,数据不可变,单向数据流: 2. 编写语法 vue: 采用单文件组件格式,保留了html,css,js分离的写法: react: 通过jsx渲染模板,html,css全部写入js中: 3. 构建工具 vue: 提供cli脚手架,可以非常容易的创建项目并进行配置: react: 使用creat-react-app,有局限行,不能完成某些配置: 4. 状态管理 v

angular,vue,react的基本语法—样式处理

基本语法 样式处理: vue: 动态属性: v-bind:class 简写 :class react: 变量:class={selecter} angular: 指令:[ngClass]="first second" & [ngClass]="['first','second']" & [ngClass]="{'first':true}" 都可以写成字符串.数组.对象格式,angular还可以写成正则格式. angular的表单指

前端自动分环境打包(vue和ant design)

现实中的问题:有时候版本上线的时候,打包时忘记切换环境,将测试包推上正式服务器,那你就会被批了. 期望:在写打包的命令行的时候就觉得自己在打包正式版本,避免推包时候的,不确信自己的包是否正确. 既然有了期望,那么就要开始百度如何去实现呢. 下面先开始介绍ant design的方法: ant design的打包工具是roadhog,那么从roadhog下手. 在roadhog文档中,发现define的配置可以传递给代码. 在ant design pro的issue中搜索中,发现环境变量的配置. 我

2015 前端[JS]工程师必知必会

2015 前端[JS]工程师必知必会 本文摘自:http://zhuanlan.zhihu.com/FrontendMagazine/20002850 ,因为好东东西暂时没看懂,所以暂时保留下来,供以后参考! MrSunny · 12 天前 上次我写<前端工程师必知必会>已经是三年前了,那是我写过最火的文章了.三年了,我仍然会在Twitter上收到关于这篇文章的消息. 从2012年到现在,一篇文章都没发过让我觉得有点羞羞哒.三年是一段很长的时间,很多东西都发生了改变.2012年,我鼓励同学们去

前端(三大框架、Bootstrap,jQuery,自我整理)

前端,HTML(超文本标记语言),CSS(层叠样式表)和JavaScript(脚本语言) HTML,通常说的h5,其实按标准来说,HTML4的后续版本不带编号了,并保证向前的兼容性 CSS的版本3,增加了translate(),能完成以前一定需要js才能做到的动画,同时增加了flex弹性盒子(响应式设计,提供一种更加有效的方式来对一个容器中的子元素进行排列.对齐和分配空白空间,以往使用float) 前端框架 一.Bootstrap 在Bootstrap的官网介绍中,Bootstrap is th

小猿圈web之前端的主流框架

社会在不断发展,互联网更新换代也是飞速,web框架也是经历一代又一代的革新,那么当今时代什么框架是前端的主流框架呢?小猿圈加加查了一些资料,整理出当今时代比较流行的三种框架,下面说一下这三种框架. 目前比较流行的前端三大框架是Angular.React.Vue,三者各有所长. 1.Angular Angular是一个JavaScript框架,最为核心的是:MVC(Model–view–controller).模块化.自动化双向数据绑定.语义化标签.依赖注入等等.Angular通过指令扩展了HTM

前端三大主流框架的对比React、Vue、Angular

前端三大主流框架的对比React.Vue.Angular React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站, 并于 2013年 5 月开源.React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它.它有以下的特性: 1.声明式设计:React采用声明范式,可以轻松描述应用. 2.高效:React通过对DOM的模拟,最大限度地减少与DOM的交互. 3.灵活:React可以与已知的库或框架很好地配合. 优点: 1. 速度快:在UI渲染过程中,