面试有赞的时候。被问到了vue和angular框架的对比,包括数据绑定机制及其优缺点。由于我的技术栈是vue2.0和angular1.x,这里先对这两个版本的框架进行对比。
1. angular1.x
vue的语法跟angular1.x是很相似的。但是vue解决了很多在angularJS中出现的问题。
复杂性
在API和设计方面,vue都比angular简单得多,因此可以快速掌握vue的全部特性并投入开发。--学习成本比较低
灵活和模块化
vue.js是一个更加灵活开发的解决方案。它允许你以希望的方式组织应用程序,而不是在任何时候都必须遵循angular.js制定的规则,这让Vue能适用于各种项目。
数据绑定
AngularJs使用双向数据绑定,vue在不同组件之间强制使用单向数据流。这使应用中的数据流更加清晰易懂。
指令和组件
在Vue中指令和组件分得更清晰。指令只封装DOM操作,而组件代表一个自给自足的独立单元--有自己的视图和数据逻辑。在AngularJs中,每件事都由指令来做,而组件只是一种特殊的指令。
运行时性能
Vue有更好的性能,并且非常非常容易优化,因为它不使用脏检查。
在AngularJs中,当watcher越来越多的时候会变得越来越慢,因为作用域内的每一次变化,所有的watcher都要重新计算。并且,如果一些watcher触发另一个更新,脏检查循环(digest cycle)可能要运行多次。AngularJS常常要使用深奥的技术,以解决脏检查循环的问题。有时没有简单的方法来优化有大量watcher的作用域。
Vue则根本没有这个问题,因为他使用了基于依赖追踪的观察系统并异步队列更新,所有的数据都是独立触发,除非他们之间有明确的依赖关系。
Angular(2.0以上)和Vue用相似的设计解决了一些AngularJs中存在的问题。
2. Angular(原本的Angular2)
Angular是一个和AngularJs完全不同的框架,比如它具有优秀的组件系统,并且很多实现已经完全重写了, Api也完全变了。
TypeScript
Angular事实上必须用TypeScript来开发,因为他的文档和学习资源几乎全部面向TS。TS有很多好处-- 静态类型检查在大规模的应用中非常有用,同时对于Java和C#背景的开发者也是非常提升开发效率的。
然而,并不是所有人都想用TS--在中小型规模的项目中,引入TS可能并不会带来太多明显的优势。在这些情况下,用vue会更好的选择,因为在不用TS情况使用Angular会很有挑战性。
虽然vue和ts的整合可能不如Angular那么深入,但是vue也提供了光的类型声明和组件装饰器。
运行时性能
这两个框架都很快,有非常类似的benchmark数据。不过熟读不是决定性的因素。
体积
在体积方面,最近的Angular版本中使用了AOT和tree-shaking技术之后是的最终的代码的体积减小了许多。但即使如此,一个包含了vuex+ + vue Router的Vue项目(gzip之后30kb)相比使用了这些优化的angular-cli生成的默认项目尺寸(~65kb)还是要小得多。
灵活性
vue相比于Angular更加灵活,Vue官方提供了构建工具来协助你构建项目,但他不限制你如何组织你的应用代码。有人夸你喜欢有严格的代码组织规范,有人喜欢更自由灵活的方式
学习曲线
要学习Vue,只需要良好的Html和javascript基础。有了这些基本的技能,就可以非常快速投入开发。
Angular的学习曲线非常陡峭--作为一个框架,他的API面积比Vue要大得多,你也因此需要理解更多的概念才能开始有效率的工作。Angular本身的复杂度是因为设计目标只是只针对大型的复杂应用,但是不可否认的是,这也使得它对于经验不甚方法的开发者相当不友好。