用于构建单页面应用程序的JavaScript框架

时间:2013-01-15 11:10:05

标签: javascript singlepage

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


我的要求如下:

  • RESTful数据层(如ember-data)
  • MV * - 结构
  • 动态路线
  • 测试 - 载体
  • 按惯例编码
  • SEO - 载体
  • 浏览器的历史记录支援
  • 好(API-)文档
  • 生产就绪
  • 生活社区

Backbone

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

Ember

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

Angular

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

BatmanMeteor

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

KnockoutCanJSSpine

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


现在我的问题是:

  • 我错过了任何优秀的SPA框架吗?
  • 您建议/推荐哪种框架?
  • 你会避免提到任何提到的框架吗?
  • 您在大型SP应用程序方面的经验是什么?

PS:我想推荐Steven Anderson(来自Knockout.js的核心开发人员)的great blogpost关于" JS" -conference的王座(来自2012年)和javascript框架一般。

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

2 个答案:

答案 0 :(得分:81)

我最近还必须决定项目的JavaScript SPA框架。

  • Ember

    很早就看到了Ember并且和你有类似的想法 - 我真的很喜欢它但感觉现在还为时尚早......我读过的一半教程与当前版本不兼容,因为最近有些事情在模板的运作方式上发生了变化。

  • Backbone

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

  • Knockout

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

  • Angular

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

  • BatmanMeteorCanJSSpine

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

  • 后记

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

    Javascript应用程序开发更像是Java生态系统,而不是Rails生态系统。 Rails为每个应用程序(Rails框架)提供了一个可靠的核心,社区提供了很多自定义(gems)。 Java提供了一种语言。然后您可以选择Java EE或Spring或Play或Struts或Tapestry。并选择JDBC或Hibernate或TopLink或Ibatis与数据库通信。然后你可以使用Ant或Maven或Gradle来构建它。并选择Tomcat或Jetty或JBoss或WebLogin来运行它。因此,除了选择 框架之外,还要更加强调选择所需内容和哪些内容有效。

答案 1 :(得分:8)

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

你会喜欢的主要功能:

  1. 受过良好教育的社区和一个提出完美设计模式的团队。伟大的约定和模块化/面向对象的架构。用CrossBrowser编程态度:)
  2. MV *结构。使用外部.htm模板构建UI小部件并进行制作,构建所有的javascript和amp;模板分为单个,缩小和小.js
  3. 使用继承构建类。属性设定者,很多功能工具。
  4. pub / sub机制(在dojo中命名的主题)
  5. 许多UI控件,从验证表单控件,对话框/工具提示到重要的,高度可定制的(但轻量级)图表和&数据网格解决方案。
  6. 一个名为DOH的良好单元测试系统。它还有一个机器人来重现鼠标/键盘动作。
  7. 一个名为NodeList的查询工具(如JQuery),具有所有jquery功能,甚至包含很多插件。
  8. 和好但不那么完整的部分。它有一个JsonRest模块用于您的REST服务。它是一个方便的工具,但缺乏很多功能。
  9. 为了克服这些问题,我们开发了一个AJAX轮询器,错误处理和通用,加载&通知解决方案 我们使用dojo框架约定和结构非常容易地完成了它。 如果您不想这样做,也许您必须为此部分使用另一个框架。

    在网络上查看优秀的SPA,您会发现所有这些都是自定义的并使用多个框架。但我们单独使用Dojo的经历太棒了。因此我建议你不要考虑任何其他框架,因为所有这些框架都不完整。但最终你还有另一种选择(我不推荐,也没有详细信息)。使用能够构建SPA的JAVA框架,自动生成UI&的JavaScript。