JavaScript的SPA框架(单页应用程序)

我的目标是将现有的Web应用程序迁移到RESTful SPA(单页应用程序) 。 目前我正在评估几个JavaScript Web应用程序框架。

我的要求如下:

  • RESTful数据层(如ember-data)
  • MV * – 结构
  • dynamic路由
  • testing支持
  • 按惯例编码
  • SEO支持
  • 浏览器的历史logging,支持
  • 良好的(API-)文档
  • 生产就绪
  • 生活社区

骨干

目前的应用程序正在使用backbone.js。 总而言之,backbone.js是一个不错的项目。 但是我缺less定义好的结构,它决定了什么地方必须发生,以及如何实现。 与更改的开发人员一起工作在一个更大的团队中,这会导致某种非结构化代码,难以维护且难以理解。 这就是为什么我正在寻找一个框架,已经定义了所有这些东西。

余烬

最后一天我看着ember.js。 这个方法对我来说似乎非常有前途。 但不幸的是,代码几乎每天都在变化。 所以我不会称之为生产就绪。 我们不能等待版本1.0,不幸的是。 但我真的很喜欢这个框架背后的想法。

ANGULAR

Angular.js也是一个广泛的框架,由谷歌维护。 但我无法熟悉angular度。 对我来说,结构似乎有点不清楚,对框架各部分的整体职责缺乏解释,实现感到迂回。 为了弄清楚这个问题:这只是我个人的印象,可能是基于缺less的知识。

BATMAN , METEOR

据我所知,这两个框架也需要一个服务器部分。 因为我们只是想要一个RESTful后端 – 不pipe是什么语言,技术或软件,这不是我们想要的。 此外后端API已经存在(RoR)。

KNOCKOUT , CANJS , SPINE

我没有深入这三位候选人。 也许这将是我的下一步。

所以我现在的问题是:

  • 我错过了什么好的SPA框架?
  • 你会build议/推荐什么框架?
  • 你会避免任何提到的框架?
  • 您在更大的SP应用程序中有什么经验?

亲切的问候,

克里斯托弗

PS:我想推荐一个来自Steven Anderson(来自Knockout.js的核心开发者)关于“Throne of JS”会议(从2012年开始)和一般JavaScript框架的伟大博客 。

PS:是的,我知道SO上已经有一些问题了。 但是,由于发展战略如此迅速和快速,其中大部分已经过时了。

我最近还不得不在一个项目上决定一个JavaScript SPA框架。

  • 余烬

    看着Ember早些时候,和你有类似的想法 – 我真的很喜欢它,但感觉现在使用还为时过早…大约一半的教程我读了不适用于当前版本,因为最近有东西改变了模板的工作方式。

  • 骨干

    骨干网是我们认真研究的第一个框架。 我不知道我为什么认为它没有“明确的结构”? 主干很清楚如何划分模型和视图代码。 也许你的意思是没有某种应用程序模板? 无论如何,骨干似乎真的专注于模型/ REST绑定的一部分,但没有真正规定任何视图绑定。 如果模型绑定对你很重要,而且你正在使用Rails,那么做到这一点应该是一件轻而易举的事情。 不幸的是,我的应用程序的Web服务并没有真正匹配,我必须编写自己的.sync.parse方法。 模型和视图代码的分离是很好的,但是因为我们必须从头开始编写我们所有的绑定,所以这是不值得的。

  • 击倒

    淘汰赛就像吟诵骨干的杨。 Backbone专注于模型,Knockout是一个MVVM框架,专注于视图。 它具有JavaScript对象属性的observable包装器,并使用data-bind属性data-bind属性绑定到HTML。 最后,我们使用了Knockout,因为视图绑定主要是我们应用程序需要的。 (…加上别人,稍后讨论…)如果你喜欢Knockout的视图绑定和Backbone的模型绑定,还有KnockBack将两个框架结合起来。

  • angular

    在Knockout之后看着这个 – 不幸的是,我们对Knockout如何看待绑定感到非常满意。 进入Knockout似乎更加复杂和困难。 它使用了一些自定义的HTML属性做绑定,我不知道我喜欢…我可能会再看看Angular,因为我遇到了很多真正喜欢这个框架的人 – 也许我们只是为了这个项目太晚了。

  • 蝙蝠侠 , meteor , CanJS , 脊椎

    这些看起来并没有太紧密。 虽然我知道Spine是一个与显式Controller对象相似的Backbone框架,并且是用CoffeeScript编写的。

  • 后记

    正如我所提到的,我们最终使用了Knockout,因为在我们的项目中,关注视图绑定更重要。 我们最后还使用了RequireJS进行模块化, 十字路口和Hasher来处理路由和历史logging, Jasmine进行testing,还有JQuery , Twitter Bootstrap和Underscore.js (可能还有更多的库我现在正在忘记)。

    JavaScript应用程序开发与Rails生态系统相比更像是Java生态系统。 Rails为每个应用程序(Rails框架)提供了一个可靠的核心内容,社区在这个(gems)之上提供了很多定制。 Java提供…一种语言。 然后您可以selectJava EE或Spring或Play或Struts或Tapestry。 并selectJDBC或Hibernate或TopLink或Ibatis与数据库交谈。 然后你可以使用Ant或Maven或Gradle来构build它。 并selectTomcat或Jetty或JBoss或WebLogin来运行它。因此,与select要使用的框架相比,更重视select你所需要的以及一起工作。

自从我们开始在我们的云服务项目上开发众多的SPA之后已经过去了一年了,所以这是一个很大的决定,用于我们的UI的JavaScript框架能够满足我们的RESTful架构需求。 经过大量的研究,我们最终使用了Dojo框架 。

你会喜欢的主要function:

  1. 受过良好教育的社区和一支有完美devise模式的团队。 伟大的约定和模块化/面向对象的架构。 与CrossBrowser编程态度:)
  2. MV *结构。 使用外部.htm模板构buildUI小部件并进行生产,将所有JavaScript&模板构build为单个缩小的.js
  3. 用inheritance构build类。 属性制定者,很多function工具。
  4. pub / sub机制(在dojo中命名的话题)
  5. 大量的UI控件,从validation表单控件,对话框/工具提示到function强大,高度可定制(但轻量级)的图表和数据网格解决scheme。
  6. 一个好的unit testing系统DOH。 它也有一个机器人来重现鼠标/键盘的动作。
  7. 一个查询工具(如JQuery),名为NodeList,具有所有jQuery特性,甚至还有很多插件。
  8. 和好,但不是那么完整的一部分。 它有一个JsonRest模块用于您的REST服务。 它是一个方便的工具,但缺乏很多function。

为了克服这些问题,我们开发了一个AJAX轮询器,error handling和通用的加载和通知解决scheme。 我们很容易地使用dojo框架的约定和结构。 如果你不想这样做,也许你必须为这个部分使用另一个框架。

在Web上查看优秀的SPA,你会发现所有这些都是定制的,并使用多个框架。 但是我们单独使用Dojo的经验是非常棒的。 因此我build议你不要考虑任何其他框架,因为所有这些框架对于SPA来说都是不完整的。 但最终你还有另一种select(我不build议,没有任何细节信息)。 去一个能够构buildSPA的JAVA框架,通过自动生成UI和JavaScript。