§Play 2.3 中的新功能
本页重点介绍 Play 2.3 的新功能。如果您想了解迁移到 Play 2.3 所需的更改,请查看 Play 2.3 迁移指南。
§Activator
您会注意到 Play 2.3 的第一个变化是 play 命令已变为 activator 命令。Play 已更新为使用 Activator,以便我们
- 扩展我们提供的用于开始使用 Play 项目的模板范围。Activator 支持更 丰富的项目模板库。模板还可以包含入门教程和其他资源。Play 社区也可以 贡献模板。
- 为开始使用 Play 提供一个不错的 Web UI,特别是对于不熟悉命令行界面的新手。用户可以通过 Web UI 编写代码和运行测试。对于经验丰富的用户,命令行界面与以前一样可用。
- 使 Play 的高生产力开发方法可用于其他项目。Activator 不仅仅适用于 Play。其他项目也可以使用 Activator。
将来,Activator 将获得更多功能,这些功能将自动使使用 Activator 的 Play 和其他项目受益。 Activator 是开源的,因此社区可以为其发展做出贡献。
§Activator 命令
play 命令中提供的所有功能仍然可以通过 activator 命令使用。
activator new用于创建新项目。请参阅 创建新应用程序。activator用于运行控制台。请参阅 使用 Play 控制台。activator ui是一个新命令,用于启动 Web 用户界面。
新的
activator命令和旧的play命令都是 sbt 的包装器。如果您愿意,可以直接使用sbt命令。但是,如果您使用 sbt,您将错过 Activator 的一些功能,例如模板 (activator new) 和 Web 用户界面 (activator ui)。sbt 和 Activator 都支持所有常用的控制台命令,例如test和run。
§Activator 分发
Play 作为包含所有 Play 依赖项的 Activator 分发版进行分发。您可以从 Play 下载 页面下载此分发版。
如果您愿意,您也可以从 Activator 网站 下载 Activator 的最小 (1MB) 版本。在下载页面上查找“mini”分发版。Activator 的最小版本仅在需要时才会下载依赖项。
由于 Activator 是 sbt 的包装器,如果您愿意,您也可以直接下载并使用 sbt。
§构建改进
§sbt-web
Play 2.3 最大的新功能是引入了 sbt-web。简而言之,sbt-web 允许将 HTML、CSS 和 JavaScript 功能从 Play 的核心分解成一系列纯 sbt 插件。这对您有两个主要优势
- Play 对 HTML、CSS 和 JavaScript 的意见更少;并且
- sbt-web 可以拥有自己的社区,并与 Play 平行发展。
§自动插件
Play 现在使用 sbt 0.13.5。此版本带来了一个名为“自动插件”的新功能,它本质上允许您为构建文件大幅减少设置导向的代码。
§资产管道和指纹
sbt-web 为 Play 带来了高度可配置的资产管道的概念,例如
pipelineStages := Seq(rjs, digest, gzip)
以上将按顺序执行 RequireJs 优化器 (sbt-rjs)、消化器 (sbt-digest),然后是压缩 (sbt-gzip)。与许多 sbt 任务不同,这些任务将按声明的顺序依次执行。
Play 2.3 的一项新功能是支持资产指纹,其原理类似于 Rails 资产指纹。资产指纹的一个结果是,我们现在在提供服务时使用远期缓存过期时间。最终结果是,由于浏览器现在能够使用积极的缓存策略,您的用户在访问您的网站时将体验到更快的下载速度。
§默认 ivy 缓存和本地仓库
Play 现在使用默认的 ivy 缓存和仓库,位于用户主目录中的 .ivy2 文件夹中。
这意味着 Play 现在将更好地与其他 sbt 构建集成,无需多次缓存工件,并允许共享本地发布的工件。
§Java 改进
§Java 8
Play 2.3 已通过 Java 8 测试。您的项目可以使用 Java 8 正常工作;除了确保您的 Java 环境已配置为 Java 8 之外,无需执行任何特殊操作。有一个新的 Activator 示例可用于 Java 8
https://www.lightbend.com/activator/template/reactive-stocks-java8
我们的文档已改进,包含了 Java 示例,并在适用的情况下包含了 Java 8 示例。查看一些 使用 Java 8 进行异步编程的示例。
有关使用 Java 8 和 Play 进行 Reactive 编程的完整概述,请查看此博客:https://www.lightbend.com/blog/go-reactive-with-java-8
§Java 性能
我们对 Java 性能进行了改进。与 Play 2.2 相比,简单 Java 操作的吞吐量提高了 40-90%。以下是主要优化
- 减少 Java 操作和主体解析器的线程切换。
- 缓存更多路由信息,并使用每路由缓存而不是共享 Map。
- 减少 GET 请求的主体解析开销。
- 使用单播枚举器来返回分块响应。
其中一些更改也提高了 Scala 性能,但 Java 的性能提升最大,也是我们工作的主要重点。
感谢 YourKit 为 Play 团队提供许可证,使这项工作成为可能。
§Scala 2.11
Play 2.3 是 Play 的第一个针对多个 Scala 版本(2.10 和 2.11)进行交叉构建的版本。
您可以通过在 build.sbt 或 Build.scala 文件中设置 scalaVersion 设置来选择要使用的 Scala 版本。
对于 Scala 2.11
scalaVersion := "2.11.1"
对于 Scala 2.10
scalaVersion := "2.10.4"
§Play WS
§独立库
WS 客户端库已重构为独立库,可在 Play 之外使用。现在可以拥有多个 WSClient 对象,而不再仅使用 WS 单例。
WSClient client = new NingWSClient(config);
Promise<WSResponse> response = client.url("http://example.com").get();
val client: WSClient = new NingWSClient(config)
val response = client.url("http://example.com").get()
每个 WS 客户端都可以使用其自身的选项进行配置。这允许不同的 Web 服务对超时、重定向和安全选项具有不同的设置。
现在还可以访问底层的 AsyncHttpClient 对象,这意味着支持多部分表单和流式主体上传。
§WS 安全
WS 客户端具有 设置,用于全面 SSL/TLS 配置。WS 客户端配置现在默认情况下更安全。
§Actor WebSockets
已为 Java 和 Scala 结合了一种使用 Actor 处理 websocket 交互的方法,例如使用 Scala
public static WebSocket<String> socket() {
return WebSocket.withActor(MyWebSocketActor::props);
}
def webSocket = WebSocket.acceptWithActor[JsValue, JsValue] { req => out =>
MyWebSocketActor.props(out)
§结果重构完成
在 Play 2.2 中,引入了许多新的结果类型,并弃用了旧的结果类型。Play 2.3 完成了此重构。有关更多信息,请参阅 迁移指南 中的“结果重构”。
§Anorm
Play 2.3 的 Anorm 包含各种修复(类型安全、选项解析、错误处理等)和新功能。
- 字符串插值可用于更轻松地编写 SQL 语句,减少冗长(传递参数)并提高性能(参数处理速度提高高达 7 倍)。例如:
SQL"SELECT * FROM table WHERE id = $id" - 可以将多值(序列/列表)作为参数传递。例如:
SQL"""SELECT * FROM Test WHERE cat IN (${Seq("a", "b", "c")})""" - 现在可以按位置解析列。例如:
val parser = long(1) ~ str(2) map { case l ~ s => ??? } - 查询结果不仅包含数据,还包含执行上下文(包含 SQL 警告)。
- 更多类型支持作为参数和列:
java.util.UUID、数字类型(Java/Scala 大十进制数和整数,更多数字之间的列转换)、时间类型(java.sql.Timestamp)、字符类型。
§HTTPS 的自定义 SSLEngine
Play 服务器现在可以 使用自定义的 `SSLEngine`。这在需要自定义的情况下也很有用,例如在客户端身份验证的情况下。
下一步: 迁移指南
发现文档中的错误?此页面的源代码可以在这里找到 这里。阅读完 文档指南 后,请随时贡献一个 pull 请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。