VueJs与ReactJS和AngularJS的异同点
React&&Vue
React和Vue有许多相似之处,它们都有:
- 使用VirtualDOM
- 提供了响应式(Reactive)和组件化(Composable)的视图组件。
- 将注意力集中保持在核心库,伴随于此,有配套的路由和负责处理全局状态管理的库。
由于有着众多的相似处,我们会用更多的时间在这一块进行比较。这里我们不只保证技术内容的准确性,同时也兼顾了平衡的考量。我们需要指出React比Vue更好的地方,像是他们的生态系统和丰富的自定义渲染器。
React&&Vue的性能
渲染性能
在渲染用户界面的时候,DOM的操作成本是最高的,不幸的是没有库可以让这些原始操作变得更快。
我们能做到的最好效果就是(来源google):
MinimizethenumberofnecessaryDOMmutations.BothReactandVueusevirtualDOMabstractionstoaccomplishthisandbothimplementationsworkaboutequallywell.
Addaslittleoverhead(pureJavaScriptcomputations)aspossibleontopofthoseDOMmanipulations.ThisisanareawhereVueandReactdiffer.
TheJavaScriptoverheadisdirectlyrelatedtothemechanismsofcomputingthenecessaryDOMoperations.BothVueandReactutilizesVirtualDOMtoachievethat,butVue'sVirtualDOMimplementation(aforkofsnabbdom)ismuchlighter-weightandthusintroduceslessoverheadthanReact's.
更新性能
InReact,whenacomponent'sstatechanges,ittriggersthere-renderoftheentirecomponentsub-tree,startingatthatcomponentasroot.
Toavoidunnecessaryre-rendersofchildcomponents,youneedtoimplementshouldComponentUpdateeverywhereanduseimmutabledatastructures.InVue,acomponent'sdependenciesareautomaticallytrackedduringitsrender,sothesystemknowspreciselywhichcomponentsactuallyneedtore-render.
也就是说,未经优化的Vue相比未经优化的React要快的多。由于Vue改进过渲染性能,甚至全面优化过的React通常也会慢于开箱即用的Vue。
JSXvsTemplates
在React中,所有的组件的渲染功能都依靠JSX。JSX是使用XML语法编写Javascript的一种语法糖。
render(){ let{items}=this.props letchildren if(items.length>0){ children=( <ul> {items.map(item=> <likey={item.id}>{item.name}</li> )} </ul> ) }else{ children=<p>Noitemsfound.</p> } return( <divclassName='list-container'> {children} </div> ) }
JSX的渲染功能有下面这些优势:
你可以使用完整的编程语言JavaScript功能来构建你的视图页面。
工具对JSX的支持相比于现有可用的其他Vue模板还是比较先进的(比如,linting、类型检查、编辑器的自动完成)。
在Vue中,由于有时需要用这些功能,Vue也提供了渲染功能并且支持了JSX。然而,对于大多数组件来说,渲染功能是不推荐使用了。
在这方面,Vue提供的是更简单的模板:
<template> <divclass="list-container"> <ulv-if="items.length"> <liv-for="iteminitems"> {{item.name}} </li> </ul> <pv-else>Noitemsfound.</p> </div> </template>
优点如下:
在写模板的过程中,样式风格已定并涉及更少的功能实现。
模板总是会被声明的。
模板中任何HTML语法都是有效的。
阅读起来更贴合英语(比如,foreachiteminitems)。
不需要高级版本的JavaScript语法,来增加可读性。
这还没有结束。Vue拥抱HTML,而不是用JavaScript去重塑它。在模板内,Vue也允许你用预处理器比如Pug(原名Jade)
div.list-container ul(v-if="items.length") li(v-for="iteminitems"){{item.name}} p(v-else)Noitemsfound.
Angular&&Vue
Vue的一些语法和Angular的很相似(例如v-ifvsng-if)。据Vue开发者说因为Angular是Vue早期开发的灵感来源。然而,Augular中存在的许多问题,在Vue中已经得到解决
复杂性
在API与设计两方面上Vue.js都比Angular1简单得多,因此你可以快速地掌握它的全部特性并投入开发。
灵活性和模块化
Vue.js是一个更加灵活开放的解决方案。它允许你以希望的方式组织应用程序,而不是在任何时候都必须遵循Angular1制定的规则,这让Vue能适用于各种项目。我们知道把决定权交给你是非常必要的。
这也就是为什么我们提供Webpacktemplate,让你可以用几分钟,去选择是否启用高级特性,比如热模块加载、linting、CSS提取等等。
数据绑定
Angular1使用双向绑定,Vue在不同组件间强制使用单向数据流。这使应用中的数据流更加清晰易懂。
指令与组件
在Vue中指令和组件分得更清晰。指令只封装DOM操作,而组件代表一个自给自足的独立单元——有自己的视图和数据逻辑。在Angular中两者有不少相混的地方。
性能
Vue有更好的性能,并且非常非常容易优化,因为它不使用脏检查。
在Angular1中,当watcher越来越多时会变得越来越慢,因为作用域内的每一次变化,所有watcher都要重新计算。并且,如果一些watcher触发另一个更新,脏检查循环(digestcycle)可能要运行多次。Angular用户常常要使用深奥的技术,以解决脏检查循环的问题。有时没有简单的办法来优化有大量watcher的作用域。
Vue则根本没有这个问题,因为它使用基于依赖追踪的观察系统并且异步队列更新,所有的数据变化都是独立触发,除非它们之间有明确的依赖关系。
有意思的是,Angular2和Vue用相似的设计解决了一些Angular1中存在的问题
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。