§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 请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。