Meteor vs Angular 已翻译 100%

oschina 投递于 2014/05/24 06:27 (共 9 段, 翻译完成于 05-24)
阅读 2616
收藏 1
0
加载中

将Meteor和Angular进行比较有点难度,因为在现阶段,除了它们都是由JavaScript写的之外,两者之间有着很大的不同。Meteor是一个运行在Node.js服务端之上全栈的框架或平台。Angular是一个客户端的框架,只运行在浏览器中。两者都非常的优秀,所以,当我使用它们的时候,我会尽量会在高层次来看待两者,并且分析两者各自有什么脱颖而出的优点。

yuezk
翻译于 2014/05/24 11:08
1

旧模式

几年前,我进入了一家大公司,该公司有着非常庞大的代码库,并需要对他们的基于web的子系统做一些大的改动工作。我一头扎进代码,试图找出我要需要改动的地方以便完成这项工作。我最终发现,由于开发人员的流动,以及他们对代码漠不关心的胡乱修改,使得最终的代码非常庞大且再乱,难以维护。我不能再像他们那样做。在这之前,我从来没有在浏览器中使用过MV*的框架,但是我知道那可能是我正在寻找的答案。于是,我开始搜索和这相关的东西,并最终决定使用Angular。

yuezk
翻译于 2014/05/24 11:49
1

当我在搜寻不同的框架的时候,我确实偶然发现了metor,但是我当时认为它刚刚起步,对这个项目来说还没有可用的地方,尽管我对它核心的设计原则很感兴趣。我正在做的这个项目已经有了一个非常庞大的后端SQL数据库,我无法对此做出修改,因此,像meteor这样的全栈框架是不适合这个项目的。

yuezk
翻译于 2014/05/24 11:48
1

程序需要模板,模板需要数据

我们要对这个项目做的第一件事就是去重构它的数据访问。这包括在服务端写一个新的REST API 供Angular app使用。之后,我们就可以实现Angular的resource service用来抽象对API的访问,这对我们来说真是棒极了。相比之下,Meteor使用了一个发布/订阅(publish/subscribe)的结构。在服务端,你可以根据你的查询定义一个数据的发布(publication)。在客户端,当你需要使用数据的时候,可以订阅(subscribe)服务端的数据发布。服务端发布的结果集会通过websocket流向客户端,保存在浏览器的缓冲中,之后,你的程序就可以访问这些数据了。你在某一个客户端对这些数据所作的修改会被传回服务端,紧接着,服务端将这些修改发布给所有连接着的客户端!这解决了如果将数据的修改在不同的用户之间实时展现的问题。

yuezk
翻译于 2014/05/24 15:10
1

这两个框架的模板系统都会帮你将一些和视图相关的代码基于对模型(model)改变,这个功能很了不起。目前来说,angular更领先一步,提供了基于class(class-based)的动画框架。当和模型相关的改动反映到到DOM上时,框架会自动的一些类(class)。这个功能可以让你使用CSS来定义一些过渡效果(transition)和动画(keyframe animation)。该框架很灵活,并且提供了API,以便使用JavaScript来控制动画,所以你可以使用Velocity.jsGSAP。我们在Differential上最近的一个客户端项目是一个纯前端,交互式的slideshow,这其中有很多视图状态(view state)的改变以及动画。基于这个原因,我们采用了Angular而不是Meteor(默认的选择),并且极度依赖它的动画框架。但是,不必担心,因为看起来Meteor已经准备在以后的版本中添加对动画的支持了。

yuezk
翻译于 2014/05/24 15:46
1

两个框架都一个共同的概念,meteor把它称作“反应式数据源”(reactive data sources)。在Angular中,有一个scope对象。这个scope创建了一个层次,你可以在这个层次里面指定值和函数。之后,你可以在你的模板中访问这些值。当scope里面的值发生改变时,你的视图会自动的更新,给了你的应用程序一个反应其模型数据的点。Angular还允许你监控数据源,以便在数据发生变动时采取自定义的动作。反观Meteor,除了这些特点之外,它还包括了一些反应式的数据源(reactive data sources)。最简单的一个例子就是session。session对象允许你在浏览器的存储中保存一些键值对。游标(Cursors)是Meteor中另一个重要的反应式数据源(reactive data source)。它是你查询数据库时返回的对象。将反应式数据源和发布/订阅模型结合在一起,就造就了meteor的神奇之处!当在你的数据在某一个客户端发生改变时,这些改变会被立即反映在你的视图中,并同时发送给服务器,后者将这些改变以流的方式发送给其他相连的客户端!游标(cursor)还允许你在数据发生改变时对数据进行直接的观察。

yuezk
翻译于 2014/05/24 21:55
1

Angular一个比较不错的特性是它的指令概念。指令允许你自定义HTML标签,来表示在HTML模板中声明的独立的组件。指令通常包括或交叉包括他们自己的将被注入的模板。这就是你在DOM上接通事件和行为的地方。然后你可以在你APP的任何地方重用这些插件。Meteor目前是通过使用后台被称作“组件”的正常模板来完成这一行为的。创建自定义组件的API有点隐藏没有公开,但是我们期望看到他们如何发展 - 希望变得跟 Angular 指令一样强大。

麦壳原野
翻译于 2014/05/24 20:23
1

工具

使用新框架的一个重要的部分就是工具的支持。Meteor不仅仅是一个框架,它还包括一个非常棒的命令行工具。启动你的应用非常简单。只需运行你项目目录下的“meteor run”,它便会启动一个web服务器,另外它会自动监视你的文件变动,并自动为你刷新浏览器。Meteor也非常容易添加 CoffeeScript, LESS,或者任何其他你需要的东西的支持. 工具使得源映射, 串联, 和精简开箱即用, 让你只需专注与应用本身. Angular项目中, 你至少需要花费一些时间捣鼓它来获得相似功能。然而,有一些很棒的Angular样本应用提供了很多帮助。

麦壳原野
翻译于 2014/05/24 20:57
1

总结

Angular学习起来确实有点难度,但是它在某些比较高级的编程模型中有着很好的应用,尽管这在开始的时候令人望而生畏。另一方面,Meteor非常容易上手。你可以用相对较少的代码完成较多的工作,并可以运用你所学到的更高级的功能来改进你的程序。

在我使用了Meteor 7个月之后,对我来说很难去想象一些场景如果不用Meteor会是什么样。它改变了我关于写程序的思考方式,我无法想象再回到以前。Meteor现在还只是pre v1.0版,并且很多功能都在完善。看一下Trello发布的Meteor的路线图(roadmap)就会知道我所提到的那些不足之处将会在v.10发布的前后得到解决。Meteor只是刚刚开始,我已经迫不及待的要看一下会发生些什么。

yuezk
翻译于 2014/05/24 22:16
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(0)

返回顶部
顶部