101

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


我的要求如下:

  • RESTful 数据层(如 ember-data)
  • MV*-结构
  • 动态路线
  • 测试支持
  • 按约定编码
  • 搜索引擎优化支持
  • 浏览器历史支持
  • 良好的(API-)文档
  • 生产就绪
  • 生活社区

骨干

当前应用程序正在使用backbone.js. 总的来说,backbone.js这是一个不错的项目,但我缺少明确定义的结构,这些结构确定了必须在哪里发生以及必须如何实施。在一个更大的团队中与不断变化的开发人员一起工作,这会导致某种非结构化代码,难以维护和理解。这就是为什么我现在正在寻找一个已经定义了所有这些东西的框架。

余烬

我调查ember.js了最后几天。这种方法对我来说似乎很有希望。但是,不幸的是,代码几乎每天都在变化。所以,我不会称之为生产就绪。而且,不幸的是,我们不能等待它成为 1.0 版。但我真的很喜欢这个框架背后的想法。

Angular.js也是一个广泛传播的框架,由 Google 维护。但我无法熟悉角度。对我来说,结构似乎有点不清楚,缺少对框架每个部分的总体职责的解释,并且实现感觉很迂回。直截了当地说:这只是我个人的印象,可能是基于缺少的知识。

蝙蝠侠流星

据我了解,这两个框架都需要一个服务器部分。而且由于我们只想要一个 RESTful 后端——无论是什么语言、技术或软件,这都不是我们想要的。此外,后端 API 确实已经存在 (RoR)。

淘汰赛, CanJSSpine

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


所以我现在的问题:

  • 我是否缺少任何好的 SPA 框架?
  • 你会建议/推荐什么框架?
  • 你会避免任何提到的框架吗?
  • 您在更大的 SP 应用中有何经验?

PS:我想推荐一篇来自Steven Anderson(来自 Knockout.js 的核心开发人员)关于“JS 王座”会议(从 2012 年开始)和一般 javascript 框架的精彩博文。

PS:是的,我知道已经有一些关于 SO 的问题。但由于 SPA 的发展如此迅速和迅速,其中大多数已经过时。

4

2 回答 2

81

我最近也不得不决定在一个项目中使用 JavaScript SPA 框架。

  • 余烬

    很早就看过 Ember 并且对它有类似的想法 - 我真的很喜欢它,但感觉使用它还为时过早......我读过的大约一半的教程不适用于当前版本,因为最近有一些东西模板的工作方式发生了变化。

  • 骨干

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

  • 昏死

    淘汰赛就像阴到骨干的阳。Backbone 专注于模型,而 Knockout 是一个 MVVM 框架,专注于视图。它具有observableJavaScript 对象属性的包装器,并使用data-bind属性将属性绑定到您的 HTML。最后我们选择了 Knockout,因为视图绑定主要是我们的应用程序所需要的。(...加上其他,稍后将讨论...)如果您喜欢 Knockout 的视图绑定和 Backbone 的模型绑定,那么还有结合了这两个框架的KnockBack 。

  • 在 Knockout 之后查看了这个 - 不幸的是,我们似乎都对 Knockout 如何查看绑定感到非常满意。它似乎比 Knockout 更复杂,更难进入。它使用一堆自定义 HTML 属性来进行绑定,我不确定我是否喜欢……我稍后可能会再看一下 Angular,因为我遇到过很多人非常喜欢这个框架——也许我们只是看这个项目太晚了。

  • 蝙蝠侠流星CanJS脊柱

    这些都没有仔细看。虽然我知道 Spine 是一个类似于 Backbone 的具有显式控制器对象的框架,并且是用 CoffeeScript 编写的。

  • 后记

    正如我所提到的,我们最终使用了 Knockout,因为对于我们的项目,关注视图绑定更为重要。我们最终还使用RequireJS进行模块化,使用crossroadsHasher处理路由和历史记录,使用Jasmine进行测试,以及JQueryTwitter BootstrapUnderscore.js(可能还有更多我现在忘记的库)。

    Javascript 应用程序开发更像是 Java 生态系统,而不是 Rails 生态系统。Rails 为每个应用程序(Rails 框架)提供了一个坚实的核心,并且社区在此基础上提供了许多自定义(gems)。Java 提供了……一种语言。然后您可以选择 Java EE 或 Spring 或 Play 或 Struts 或 Tapestry。并选择 JDBC 或 Hibernate 或 TopLink 或 Ibatis 与数据库通信。然后你可以使用 Ant 或 Maven 或 Gradle 来构建它。并选择 Tomcat 或 Jetty 或 JBoss 或 WebLogin 来运行它。因此,与选择要使用的框架相比,选择你需要的东西和协同工作的东西更重要。

于 2013-01-15T13:07:27.860 回答
8

自从我们开始开发具有众多 SPA 的云服务项目以来已经一年了,所以这是一个重大决定,为我们的 UI 使用哪个 javascript 框架来满足我们的 RESTful 架构需求。经过大量研究,我们最终使用了Dojo 框架

您会喜欢的主要功能:

  1. 受过良好教育的社区和一个提出完美设计模式的团队。伟大的约定和模块化/面向对象的体系结构。具有跨浏览器编程态度:)
  2. MV* 结构。使用外部 .htm 模板构建 UI 小部件,对于生产,将所有 javascript 和模板构建成一个单一的、缩小的小型 .js
  3. 使用继承构建类。属性设置器,很多功能工具。
  4. pub/sub 机制(dojo 中的命名主题)
  5. 许多 UI 控件,从验证表单控件、对话框/工具提示到功能强大、高度可定制(但轻量级)的图表和数据网格解决方案。
  6. 一个名为 DOH 的优秀单元测试系统。它还有一个机器人来重现鼠标/键盘动作。
  7. 一个名为 NodeList 的查询工具(如 JQuery),具有所有 jquery 功能,甚至还有很多插件。
  8. 以及好的但不那么完整的部分。它有一个 JsonRest 模块可与您的 REST 服务一起使用。它是一个方便的工具,但它缺乏很多功能。

为了克服这些问题,我们开发了 AJAX 轮询器、错误处理和通用、加载和通知解决方案。我们使用 dojo 框架约定和结构非常容易地做到了这一点。如果您不想这样做,也许您必须为此部分使用另一个框架。

查看网络上的优秀 SPA,您会发现所有这些 SPA 都是定制的并使用多个框架。但我们单独使用 Dojo 的体验非常棒。因此我建议您不要考虑任何其他框架,因为它们对于 SPA 来说都是不完整的。但最终你还有另一个选择(我不推荐,也没有详细信息)。通过自动生成 UI 和 javascript,使用能够构建 SPA 的 JAVA 框架。

于 2013-08-03T20:42:10.213 回答