文档

§Play 2.3 中的新功能

本页重点介绍 Play 2.3 的新功能。如果您想了解迁移到 Play 2.3 所需的更改,请查看 Play 2.3 迁移指南

§Activator

您会注意到 Play 2.3 的第一个变化是 play 命令已变为 activator 命令。Play 已更新为使用 Activator,以便我们

将来,Activator 将获得更多功能,这些功能将自动使使用 Activator 的 Play 和其他项目受益。 Activator 是开源的,因此社区可以为其发展做出贡献。

§Activator 命令

play 命令中提供的所有功能仍然可以通过 activator 命令使用。

新的 activator 命令和旧的 play 命令都是 sbt 的包装器。如果您愿意,可以直接使用 sbt 命令。但是,如果您使用 sbt,您将错过 Activator 的一些功能,例如模板 (activator new) 和 Web 用户界面 (activator ui)。sbt 和 Activator 都支持所有常用的控制台命令,例如 testrun

§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 现在使用 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%。以下是主要优化

其中一些更改也提高了 Scala 性能,但 Java 的性能提升最大,也是我们工作的主要重点。

感谢 YourKit 为 Play 团队提供许可证,使这项工作成为可能。

§Scala 2.11

Play 2.3 是 Play 的第一个针对多个 Scala 版本(2.10 和 2.11)进行交叉构建的版本。

您可以通过在 build.sbtBuild.scala 文件中设置 scalaVersion 设置来选择要使用的 Scala 版本。

对于 Scala 2.11

scalaVersion := "2.11.1"

对于 Scala 2.10

scalaVersion := "2.10.4"

§Play WS

§独立库

WS 客户端库已重构为独立库,可在 Play 之外使用。现在可以拥有多个 WSClient 对象,而不再仅使用 WS 单例。

Java

WSClient client = new NingWSClient(config);
Promise<WSResponse> response = client.url("http://example.com").get();

Scala

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

Java

public static WebSocket<String> socket() {
    return WebSocket.withActor(MyWebSocketActor::props);
}

Scala

def webSocket = WebSocket.acceptWithActor[JsValue, JsValue] { req => out =>
  MyWebSocketActor.props(out)

§结果重构完成

在 Play 2.2 中,引入了许多新的结果类型,并弃用了旧的结果类型。Play 2.3 完成了此重构。有关更多信息,请参阅 迁移指南 中的“结果重构”。

§Anorm

Play 2.3 的 Anorm 包含各种修复(类型安全、选项解析、错误处理等)和新功能。

§HTTPS 的自定义 SSLEngine

Play 服务器现在可以 使用自定义的 `SSLEngine`。这在需要自定义的情况下也很有用,例如在客户端身份验证的情况下。

下一步: 迁移指南


发现文档中的错误?此页面的源代码可以在这里找到 这里。阅读完 文档指南 后,请随时贡献一个 pull 请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。