大型项目中,NodeJS和Play Framework哪个更好?

55

我真的在两个构建大型应用程序的技术栈之间犹豫不决。一方面是:

  • Node.js
    • express
    • coffee script
    • coffeekup
    • mongoose/mongodb 或者
    • presistencejs/mysql


  • Play Framework w/ Scala
    • Anorm w/ mysql
    • 或者 mongodb

我觉得使用node.js很有吸引力,因为我已经掌握了coffeescript,可以在服务端编写所有的代码、视图和客户端代码。但如果选择这条路线,我仍然不确定哪种数据库更适合我使用。MongoDB使数据存储变得快捷简便,但缺少真正的关系可能会更难以处理我的数据模型(类似于SQL)。

使用Play Framework也很吸引人,因为我在使用Java时已经熟悉了该框架,但是我对Scala并不了解,因此在学习该语言时会影响生产率。使用Anorm数据库访问层也很吸引人,因为我可以手动编写SQL语句,而且结果会自动映射到对象中,这节省了很多精力。

我一直倾向于使用node.js,但我还没有确定最好的数据库访问层应该使用哪种。是否有人有这方面的经验并能分享一些见解呢?

2个回答

47
你选择的堆栈应该取决于你的应用需求。让我们看一下Play和Node的优势:
Node - 实时应用(聊天,动态信息) - 事件驱动架构 - 可以执行客户端服务器任务(例如提供文件),但不适合此任务 - 数据库管理、测试工具等可作为额外软件包提供
Play!
- 客户端服务器应用(网站,服务) - 分享无内容架构 - 可以执行实时任务(例如Websockets),但不适合此任务 - 数据库管理(包括迁移!)、测试工具等内置核心功能
如果您的应用更符合传统的基于Web的模型,则Play可能是最佳选择。如果需要即时反馈和实时动态消息,则Node是更好的选择。
对于大型传统应用程序,请认真考虑Play!框架,因为它具有内置的单元和功能测试以及数据库迁移。如果将其纳入开发过程中,这些功能可以大大提高最终产品的预期效果,并使其稳定且没有错误。

33
为什么 Play 框架不适用于实时任务?Play 框架基于事件驱动的服务器架构。 - Jonas
2
Play框架建立在客户端请求服务器架构之上。使用continuations可以进行异步操作,而Play框架具有使此过程更加简单的库;其优势在于短请求生命周期(即传统Web请求)。http://www.playframework.org/documentation/1.2.3/asynchronous - Mike
30
我认为Play 2.0非常适合实时任务--这里有一些Play 2 WebSocket示例/文档 - KajMagnus
2
如果你有疑问,可以查看Typesafe控制台。实时仪表盘。 - i.am.michiel
1
KajMagnus的链接不再指向有效示例。然而,这里有关于Play 2.3.3中WebSockets的文档:https://www.playframework.com/documentation/2.3.3/ScalaWebSockets - Nepoxx

13

比较Web框架时应考虑以下10个主要类别:

  1. 学习曲线:入门难度、上手容易程度、整体学习曲线。
  2. 开发功能:路由、模板、国际化、表单、JSON、XML、数据存储访问、实时Web。
  3. 测试:单元测试、功能测试、集成测试、测试覆盖率。
  4. 安全:CSRF、XSS、代码注入、头部信息、认证、安全声明。
  5. 构建:编译、运行测试、预处理静态内容(如sass/less/CoffeScript)、打包。
  6. 部署:托管、监控、配置。
  7. 调试:逐步调试器、性能分析工具、日志记录。
  8. 扩展:吞吐量、延迟、并发。
  9. 维护:代码重用、稳定性、成熟度、类型安全、集成开发环境(IDEs)。
  10. 分享:开源活动、邮件列表、受欢迎程度、插件、商业支持、就业机会。

查看我的演讲Node.js vs Play Framework,详细了解这两个框架在这10个方面的比较。


2
那绝对是一次很棒的演讲,但我有点惊讶你没有提到 Play 完全可以和 Java 一起使用,我觉得这会吸引更多人。 - Nepoxx
1
@Nepoxx:这次演讲是在Scala会议上,所以我主要关注Play/Scala,但正如你所说,Play也可以与Java一起使用。 - Yevgeniy Brikman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接