§Play 2.3 的新功能
此頁面重點介紹 Play 2.3 的新功能。如果您想了解遷移到 Play 2.3 所需進行的變更,請查看 Play 2.3 遷移指南。
§Activator
您會注意到 Play 2.3 的第一件事是 play
指令已變更為 activator
指令。Play 已更新為使用 Activator,以便我們可以
- 擴充我們提供用於開始 Play 專案的範本範圍。Activator 支援一個更豐富的專案範本函式庫。範本也可以包含教學課程和其他用於入門的資源。Play 社群也可以提供範本。
- 提供一個友善的 Web UI 用於入門 Play,特別是對於不熟悉命令列介面的新手。使用者可以透過 Web UI 編寫程式碼並執行測試。對於有經驗的使用者,命令列介面與以前一樣可用。
- 讓 Play 的高生產力開發方法可用於其他專案。Activator 不僅適用於 Play。其他專案也可以使用 Activator。
在未來,Activator 將獲得更多功能,而這些功能將自動使 Play 和其他使用 Activator 的專案受益。Activator 是開源的,因此社群可以協助其演進。
§Activator 命令
使用 play
命令可用的所有功能仍然可以使用 activator
命令。
activator new
用於建立新專案。請參閱建立新應用程式。activator
用於執行主控台。請參閱使用 Play 主控台。activator ui
是啟動 Web 使用者介面的新命令。
新的
activator
命令和舊的play
命令都是 sbt 的包裝器。如果您願意,您可以直接使用sbt
命令。但是,如果您使用 sbt,您將錯過 Activator 的多項功能,例如範本 (activator new
) 和網路使用者介面 (activator ui
)。sbt 和 Activator 都支援所有常見的主控台命令,例如test
和run
。
§Activator 發行版
Play 以 Activator 發行版形式發行,其中包含 Play 的所有相依性。您可以從 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
已整合一種方法,使用 actor 來處理 websocket 互動,適用於 Java 和 Scala,例如使用 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`。這在需要自訂時也很有用,例如在客戶端驗證的情況下。
下一頁:遷移指南
在此文件發現錯誤?此頁面的原始碼可以在 這裡 找到。閱讀 文件指南 後,歡迎貢獻拉取請求。有問題或建議要分享嗎?前往 我們的社群論壇 與社群展開對話。