Phoenix 1.4.0 已發佈

由 Chris McCord 於 2018 年 11 月 7 日發佈


Phoenix 1.4 已推出!此版本附有令人興奮的新功能,最引人注目的是 HTTP2 支援、編譯時間縮短帶來的升級開發體驗、新的錯誤頁面,以及本機 SSL 憑證產生。此外,我們的頻道層內部結構經過大修,提供更佳的結構和可擴充性。我們還推出了一個新的 Presence JavaScript API 並對路由和測試 DSL 整合了 Elixir 格式化程式。

phx_new hex 封存

mix phx.new 封存現在可透過 hex 安裝,能提供更簡單且有版本控管的安裝體驗。

若要取得新的封存,只需執行

$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0

新的產生器現在預設為 Ecto 3.0,對於現有的應用而言,此為一項容易的升級。Ecto 3.0 包含許多新功能和改良,其詳細資訊可參閱 Ecto 3.0 搶先看文章

新的產生器也使用 Milligram 取代 Bootstrap,以支援非類別標記產生。其結果是美觀的預設值,讓產生的標記更易於根據個別 CSS 需求進行自訂。

註解:現有的 Phoenix 應用程式將繼續在 Elixir 1.4 上運行,但新的 phx.new 封存需要 Elixir 1.5+。

HTTP2

感謝 Cowboy 2 的發行,Phoenix 1.4 只需在 mix.exs 中修改一行,便可支援 HTTP2。只要在 deps 中新增 {:plug_cowboy, "~> 2.0"},Phoenix 即可使用 Cowboy 2 介面執行。

本機 SSL 開發

大多數瀏覽器都需要透過 SSL 連線進行 HTTP2 要求,否則會回退成 HTTP 1.1 要求。為協助本機透過 SSL 開發,phoenix 附帶一個新的 phx.gen.cert 任務,該任務會產生自簽憑證,以在開發階段測試 HTTPS。

更多資訊請參閱 phx.gen.cert 文件。

更快速的開發編譯

由於 plug 和編譯時間變更,我們的開發編譯速度已提升。您可以在 DockYard Phoenix 文章 中閱讀更多詳細資訊

新的開發 404 頁面

我們在開發階段的 404 頁面現在會列出原始路由可用的路由,例如

UserSocket 連線資訊

使用 Phoenix 頻道時,備受要求的功能是可以存取更多基礎傳輸資訊。1.4 版現在提供 connect/3 UserSocket 回呼,此回呼可以提供連線資訊,例如點對點 IP 位址、主機資訊,以及 Websocket 和長期輪詢傳輸的 HTTP 要求之 X 標頭。

新的 Presence JavaScript API

一個新的向下相容的 Presence JavaScript API 已被引入,用於解決競爭條件並簡化使用方式。以前,客戶端需要針對 "presence_state"presence_diff" 事件進行多個通道回調,並派發至 Presence.syncStatePresence.syncDiff 函數。現在,該介面已統一為一個單一的 onSync 回調,並由存在物件追蹤其自身的通道回調和狀態。舉例來說

let presence = new Presence(roomChannel)
presence.onSync(() => {
  console.log("users online:", presence.list((id, {name}) => name))
})

就是這麼簡單!

webpack

mix phx.new 生器現在使用 webpack 來產生資產,取代 brunch。開發體驗保持不變 — Javascript 進入 assets/js、css 進入 assets/css、靜態資產存放在 assets/static,因此那些對 JS 工具使用方式沒有興趣的人員可以使用 webpack 繼續沿用相同的模式。那些需要最佳 js 工具的人員可以受益於 webpack 更複雜的程式碼合併,以及移除未使用的程式碼等。

接下來是什麼

隨著 1.4 版本的釋出,我們已準備好專注於圍繞 Elixir 和 Phoenix 生態系統的其他令人興奮的計畫。最值得注意的是,我們很興奮能將 telemetry 整合至 Phoenix 中,用於指標追蹤和視覺化。同時,我們也在努力將 Phoenix.PubSub 重寫成更小的構建區塊,並為社群提供首屈一指的分布式程式設計工具包。您可以在 Firenest 專案追蹤此進度。

除了 telemetry 和 firenest 計畫外,我們也致力於 Phoenix.LiveView,讓伺服器呈現的即時體驗不具備今日單一網頁應用程式架構中的所有複雜性。在某些使用案例中,LiveView 可以啟用與單一網頁應用程式相當豐富的使用者體驗,而且我們迫不及待要向社群釋出初始版本。

我的 ElixirConf 主題演講詳細介紹了 telemetry 和 LiveView

Programming Phoenix Book

Programming Phoenix Book 目前為測試版,可透過 PragProg 購買,並包含 1.4 的所有最新變更。我們將此書命名為 “>= 1.4”,並認為它相對具有未來性,因為我們會持續釋出次要版本。

特別感謝

我特別感謝 Loïc Hoguin 在 Cowboy 2 上的工作,讓我們能夠提供首屈一指的 HTTP2 體驗。我們也要感謝 Bram Verburg,他貢獻了本機 SSL 憑證產生,用於跨平台和不依賴外系的憑證產生。

此外,我還要感謝 José Valim 和 Plataformatec,他們在通道層的全面修改上所做的努力,這提供了一個可擴充且朝前邁進的基礎。

一如往常,我們提供了逐步驟說明,用以提升您的 1.3.x 應用程式速度:https://gist.github.com/chrismccord/bb1f8b136f5a9e4abc0bfc07b832257e

請將問題反映至議題追蹤器,並在 #elixir-lang IRC、Elixir Slack 和 Elixir 論壇上找到我們,如果您有任何疑問。完整的變更紀錄變更清單可以在 這裡 找到。

快樂駭客!

–Chris