Angular.js Backbone.js和其他MV *图案js库?

时间:2012-10-18 13:01:09

标签: javascript web-applications backbone.js frameworks knockout.js

我是Web应用程序的新手,更具体地说是这个MV*模式。我们正在创建一个Web应用程序,我们正在考虑脱离jQuery,而不是完全,但我们正在尝试使用MVC,MVVM或MVP支持来实现客户端语言。基本上是将视图与模型分开的东西。作为MV*模式的新手,我偶然发现了this site.

它基本上列出了(差不多!)所有支持这种MV*模式的客户端语言/框架,在访问它之后我真的很困惑。因为根据这个网站..

  

在一天结束时,Ember.js是唯一拥有的框架   我想要的一切。我最近移植了一个相对较小的Backbone.js   应用到Ember.js,尽管有一些小的性能   问题,我对结果代码库感​​到非常高兴。存在   在Yehuda Katz的支持下,Ember.js周围的社区也是   惊人。这绝对是值得关注的框架。

但是在SO上,我找到了this,这让我觉得角度更好了,而在SO上,thisthis让我觉得它可能是我正在寻找的主干。

更糟糕的是,测试表明结果完全不同。 在这里

http://jsfiddle.net/HusVw/1/ Backbone clear winner

http://jsfiddle.net/ericf/NrpcQ/ Backbone winner again

http://jsperf.com/angular-vs-knockout-vs-extjs-vs-backbone/2 angular winner for less data for more its knockout

http://jsperf.com/knockout-js-vs-direct-dom-manipulation/3 Backbone again

http://jsperf.com/angular-vs-knockout-vs-ember/33 no way its ember as the site mentioned

所以,基本上这一切都让我感到困惑,我无法决定我应该学习的网名是什么,以及我应该在网站上实施什么。正如在测试中Backbone明显突出,但我听到了很多关于knockout的内容,但我提到的SO链接是关于angular的?我知道这可能取决于我目前正在开发的应用程序,但我想要一个更广泛的观点,不仅对这个项目有用,而且对于更长期的有用?在哪种情况下你更喜欢哪个框架?或者我应该只学习它们吗?(jk,在合理的时间内不能真正做到这一点。)

为了让事情更进一步,我听说dartwiki说..

  

Dart的目标是“最终取代JavaScript作为语言   在开放的网络平台上进行网络开发。“

因此,如果要替换js,为什么我甚至会考虑学习这些js库/框架?

所以,基本上,这一切搞砸了,我完全糊涂了?任何人都可以帮我决定吗?

2 个答案:

答案 0 :(得分:26)

可能没有客观答案,但这是我的2美分:

Backbone通常会导致更大的代码库,更难以维护。类似于你的链接中的轶事,我曾经在一个项目中工作,其中代码从使用Backbone的2500行收缩到使用Angular的600行。淘汰赛可能会产生同样小(=好)的结果。我的同事已经从Backbone转移到Knockout,之后更加快乐。

Backbone的优势在于它非常轻巧,并为您提供了更多的结构选项。这也意味着您可以进行更多性能调整,因此速度更快。那些相同的方面也是它的缺点:你需要自己构建事物意味着:更多代码,更复杂和可能更多的错误。

关于你提到的测试:它们不是客观的,因为它们强调一个非常特殊的用例。此外,他们是由Backbone本人的作者发布的,所以很明显他们在很好的基础上展示了Backbone。对于普通用户界面,无论你选择哪一个(Backbone,Angular,Knockout),性能都不应该成为问题。 Angular的一个警告:如果你想在你的页面上动态显示超过2000个元素,那么它可能会有问题(请参阅Angular创建者自己的答案:How does data binding work in AngularJS?)。

关于Dart:它的目标是成为一种语言,而不仅仅是语言中的MV *框架。这是一个完全不同的野兽,如果你只需要一个MV *框架,Dart就会有点过分。此外,Dart仍然非常年轻,在大多数浏览器中都不受支持。

答案 1 :(得分:3)

嗯,首先,这个问题确实没有任何“好”的答案。如果你问他们的创作者,所有的MVC库都很好:p 也就是说,我建议您开始阅读TODO-MVC中的示例,这样您就可以看到简单的TO-DO Web应用程序需要多少代码,以及复杂程度如何。然后决定你自己愿意接受什么。 我的个人推荐是Backbone。此外,还有一些互补的库可以做(几乎)神奇的东西,比如Backbone Nested

祝你好运!