Play Framework 1.0和2.0之间的主要区别是什么?
随着最近发布的Play Framework 2.0,我想知道是否有人能从高层次的angular度总结Play Framework 1和2之间的主要区别。
我已经编译了一些(玩1.0 – >玩2.0):
- 模板引擎:Groovy页面 – > Scala模板
- 坚持:hibernate – > Ebean
- 语言支持:Java – > Scala,Java
- dynamic编译:字节码注入 – >通过SBTdynamic编译
- 构build系统:不适用 – > SBT
- 可扩展性:模块,插件 – >子项目,插件,SBT插件
还有什么 ? 阿卡?
这是我的清单,当然有一些重复
-
打破向后兼容性(这是从头开始重写)
-
核心编程在斯卡拉vs java(学习scala协作)
-
scala模板(但工作正在做groovy模板作为一个模块,以缓解迁移),所以你必须指定每个参数的types
-
sbt控制台而不是python脚本
-
sbt用于解决依赖而不是内置解决scheme(播放依赖关系命令)
-
模块的可用性,显然需要一些时间来迁移它们…
-
对于java,它有利于ebean代替hibernate(但你可以使用hibernate)
-
对于Scala来说,有了anorm(但你可以使用其他库)
-
更模块化,更容易挑选其他组件
-
更多的types安全 – 视图甚至path在编译时被检查
-
更好的性能
-
typeafe支持,它是types安全堆栈的一部分
-
更less的魔力,没有太多的字节码生成和类似的东西
-
更标准,(播放项目只是标准的sbt项目)
-
不同的控制器API(更详细的,恕我直言),你可以比较一个简单的播放1.x crud控制器与类似的播放2.0一个
-
Scala是一stream的公民,但是Java同样被支持(每个人都有本地API)
-
热重新编译是比较慢(它仍然在testing阶段,让我们希望他们解决它)
-
scala IDE支持并不像java那么成熟(但是它的发展很好)
-
asynchronous支持委托给阿卡
-
更好地为不同types的数据源做好准备,比如nosql dbs
有关更多信息,请参阅播放2.0页 ( 此处提供西class牙语翻译)和RC1文档
无论如何,我认为最主要的区别在于1.x版本试图在逃离j2ee的情况下构build自己的堆栈,现在它们是基于scala,akka,sbt和公司支持的新堆栈的一部分像types安全…
我觉得以下几点很重要。 有些是优点,有些是反对的。 你必须自己看看你喜欢什么版本。
-
核心是用Scala编写的,所以如果你不是一个Scala开发者,你不能自己修复一个bug。 这是一个1.2的实力。 此外,如果文件不是很好,你会丢失。 在游戏1.2中,您可以简单地查看代码。 在Eclipse中,你有一个IDE来轻松search引用。 我不确定它是否存在一个类似的Scala的IDE。 我听说日食intellij与它正常工作,但没有自己的经验。
-
2.0中的组件更松散耦合。 在游戏2.0中,你可以轻松地select你喜欢的模板引擎或持久层。 在1.2中,selectJPA之外的东西更难以坚持。
-
Scala现在是一stream的公民,所以如果你想用Scala或Java编写你的应用程序,你可以自由select。
-
其他框架的依赖性更高。 例如,他们现在需要Scala和Akka。 两者都很好,但很复杂。 所以如果这些框架中有一个出现错误,你可能会遇到很大的麻烦。 在播放1.2我只看到Hibernate的这种风险。
-
“一切”现在是安全的,可以由编译器检查。
-
将Python改为SBT意味着在开发机器上需要更多的内存。 我的意思是Scala编译器至less需要512 MB RAM。 这可能是连续构build服务器上的问题。
当然Codemwnci提到的很多小细节。
你的名单是一个非常好的开始。 我的列表看起来很像一些额外的东西。
- 模板已经从Groovy转移到Scala。
- 斯卡拉成为一stream的公民,而不是一个可选的插件
- 更加注重types安全,特别是在模板中
- Python到SBT
- hibernate到Ebean
- Akka来补充Play 1.x中的asynchronousfunction,而不是Akka作为模块
- 核心(而不是scala插件)
- 由于较less的dynamic元素和更多的编译,在生产中的性能改进
- 集成到TypeSafe堆栈中
我们的名单之间有重复,如你所料。 另外要注意的是,这张名单是截至2011年11月,而玩2仍在testing版。
这里有一些非常好的答案,我只是想补充一些小的观点,并提供随时间变得更加清晰的细节。
In-Browser-Reporting:在浏览器中使用Javascript(使用google的闭包编译器)和CSS文件播放2个错误报告,而不仅仅是Java / Scala文件。 这真的很酷。
部署为WAR: Play 2 仍不能正式支持部署或导出为WAR。 存在一个应该提供这种支持的插件 ,但在testing中存在一些已知问题。 如果没有Servlets 3.1容器,对所有Play 2function的全面支持是不可能的,这个容器至less需要半年,可能更多。
插件:现在,还有更多的游戏1,如果你依赖于一些插件,确保它也存在玩2。
IDE支持: IntelliJ 12应该带有对播放2的内置支持。你已经可以获得EAP了(我用完了超链接,所以你不得不谷歌)。
主观观点:我觉得Play 2为了支持更高级的function和更完整的types安全而牺牲了一些简单性。 我并不是说Play 2很难或者不直观,只比Play 1less。
Play 1是网页开发者的网页开发者的网页框架。 Play 2是Web开发人员为Web开发人员提供的前瞻性Web框架。
所以说,重点略有转移,易用性不再是主要目标,而是两个主要目标之一。 这当然只有我的意见,我知道的很less。
您可以在以下博客文章中find有关该主题的其他内容: http : //blog.awfbeat.com/post/22314115684/impressions-of-play-framework-1-2-4-vs-2-0
从这篇文章总结:
- 资产pipe道直接使用Google Closure编译器,CoffeScript和LESS
- 一切都被编译,甚至路线文件
- 低运行的应用程序的内存足迹
- 使用Iteratee / Enumerator进行asynchronous/反应式编程
- 正如你所提到的,斯卡拉,阿卡,…