Angular2 相比 Vue 有什么优势?

同样是组件化的,把 js 和 html 都写在一个文件里,Angular 2 相比 Vue 有什么优势可言吗?
关注者
578
被浏览
92865
Angular2 相比 Vue 有什么优势? - 匿名用户的回答 还是比较中肯的,但我也可以稍微分析一下:

1. 个人 vs. 大公司,这里直接复制黏贴我在另一个问题下的评论:

这是个常见的担忧。我其实有时候觉得一个项目人多未必就好,你如果去 Vue/React/Angular/Ember 的 GitHub issues 转转,你会发现 Vue 的未关闭 issues/bugs 是最少的,而且开过 issue 的人都知道 Vue 的 bug 通常都会在一两天之内就 fix (对数据感兴趣的可以看看 Issue Stats)。大团队的开发效率真的高吗?看看 Angular 2 和 Aurelia 开发了这么久都迟迟处在 beta 状态,你真的对他们的开发效率有信心?我也参与 Meteor 的维护,深知一个庞大的项目在多人参与之后反而对于 issue 的定位、分配、修正速度有多大的影响,正因为 Vue 是我一个人的项目,我对任意一段代码都了如指掌,所以我修 bug 的效率是多人协作项目根本无法比较的。

另一方面,敢不敢依赖个人项目其实完全取决于团队对风险的容忍度,以及觉得项目的开发者靠不靠谱。你看 Laravel / Express / Backbone / Babel / CoffeeScript / Browserify / Webpack / Less / PostCSS / jspm 其实都是一人主导的项目,大家不照样用得风生水起?所以非要拿这个说事儿其实也不全面的。(update: 现已全职开发 Vue)

2. 第二点没错。不过 ng2 + NativeScript 到底好不好用还是个未知数,另一方面可以看看 Weex 到底怎么样。(update: Weex 已支持用 Vue 2 作为 runtime,合作进行中)

3. 所谓原生的服务端渲染,只要我写一个不就行了吗 -.- 虽然 Vue 的核心实现和 DOM 强耦合,但也不是没有解决办法。(update: Vue 2 已支持)

4. 不觉得多语言算是个优势,最多算是个特点吧。见仁见智了。其实用 TypeScript 写 Vue 的人也不少(DefinitelyTyped 上有 Vue 和 vue-router 的 d.ts),Dart 么... 呵呵。另外 *.vue 文件支持用第三方预处理器写模板和 CSS,ng2 就做不到,这一点我反倒觉得是 Vue 优势。(update: Vue 2 全家桶自带官方 typings)

5. Vue 在最佳实践下需要手动使用 setter 的场景其实非常少,这和对象复杂不复杂没有关系,只和你有没有正确地声明初始数据有关系。ng2 虽然有 zone.js,但是对于不是从 ng2 所控制的范围内触发的变动,ng2 依然不能检测到。换句话说,数据操作必须是从 ng2 自身的方法或是事件侦听函数中开始,才能享受 zone.js 的便利。相比之下在 Vue 中,响应化以后的数据可以独立于 vm 之外被单独任意操作,这就使得和第三方数据源的整合可以和组件解耦。(update: ng2 Zone.js 是个坑 zhihu.com/question/5302)

6. 性能这一点直接下这样的结论并不全面。不妨给几个跑分链接看看?在我看到的跑分数据里 ng2 除了超大量表单 (10k+ cells) 的首屏渲染有明显优势外,其他情况下也就是比 Vue 快那么一丢丢而已。另外大部分跑分的场景都是不全面的,尤其是脏检查的短板(大量 watcher + 小量数据热更新)很少有在跑分里出现,而这恰恰是 Vue 的长处。最后,别忘了 ng2 那 500kb minified 的大小。(update: 基于 krausest/js-framework-benchmark Vue 2 确实比 ng2 性能略优)

好像偏题了,如果说 ng2 真的对于 Vue 有什么优势的话,可能还是上面所提到的第二点吧。

最后,这种比较其实没啥大意义,如果你对服务器渲染/原生移动有硬需求,那还不如上 React。抛开硬需求之外,那就是看哪个更符合你/你的团队的开发习惯,更能提升效率,这个你靠别人给你指点显然没用,自己试试就知道。