了解如何使用 Phoenix Framework享受建立即時Web/行動應用程式的樂趣
對於「最終用戶」來說是快速的、可靠的、可擴展的、可維護的和(容易)可擴展的!
作為網頁/行動應用程式開發人員,我們需要利用其他(真正聰明的)人所做的工作
而不是一直「從頭開始」不斷地建構東西;這就是我們使用框架來建立應用程式的原因!
請參閱: “選擇鳳凰城的十大理由”(本頁下方! )
有許多框架可供選擇(下面的“問題”部分提到了一些“流行”的框架)。
但如果我們遵循「流行」的方式,我們仍然會到處騎著馬(和車),不會取得任何進展。
注意: Elixir的所有「為什麼」原因也適用於Phoenix !
看看它們:https://github.com/dwyl/learn-elixir#why
不折不扣的Web 應用程式框架!
任何技術項目中最大的「約束」是人。一個「企業家」/「創辦人」或「產品負責人」可以擁有世界上所有好的想法,如果他們無法將想法轉化為現實,那就毫無意義。
顯然,您應該在自己的硬體/雲端上運行自己的基準測試,並根據應用程式/產品的要求做出明智的決策,但是...當我們讀取Phoenix 應用程式可以處理多少並髮用戶的統計數據時(即時WebSocket 連線)我們驚呆了!這意味著我們可以用減少 90% 的資源來建立即時應用程式。
所有這些意味著您在硬體/雲端基礎設施上花費的資金要少得多,因此您的應用程式/公司可以獲得成本競爭優勢。
如果您有幸考慮在下一個專案中使用更好的東西,那麼 Phoenix 就是您的最佳選擇!
了解更多:http://www.phoenixframework.org
許多人/團隊/公司已經在使用 Erlang/Elixir 和 Phoenix 並看到了驚人的結果!
包括:Adobe、BBC、Spotify、Pinterest、Discord(遊戲玩家聊天應用程式)、Groupon(Fave)、孤獨星球、Brightcove、Slack ...
請參閱:https://github.com/doomspork/elixir-companies
如果不了解 Elixir,就無法建立 Phoenix 應用程式。
如果您是 Elixir 新手,請「星標」(書籤) this
儲存庫(以便您明天可以返回)
然後去: github.com/dwyl/learn-elixir 學習elixir,直到你覺得你理解了語法,然後再回來學習Phoenix!
具體來說,您應該專注於學習 Elixir「基礎知識」:
Phoenix 使用 Node.js 來編譯 JavaScript 和 CSS 檔案等資產(使用Webpack)。
只需確保您安裝了Node.js 即可。 https://nodejs.org
您無需了解 Node 即可使用 Phoenix。
如果您已經學習了一些 Elixir 並安裝了 Node.js,那麼開始使用 Phoenix 的第一步就是安裝!
Phoenix 文件非常棒,因此我們建議遵循官方phoenix 安裝說明!
您還需要安裝 PostgreSQL,上面連結的 Phoenix 安裝指南中有一個關於如何安裝的教程,但您也可以查看我們的learn-postgresql
存儲庫以獲取說明,如果遇到任何問題,請提出問題!
雖然對 JavaScript 的基本了解有時會很有用,但您不需要知道如何使用 Node 來使用 Phoenix。
如果您好奇為什麼他們選擇 Brunch.io 而不是“替代品”,
簡短的答案是:簡單和速度!請參閱:http://brunch.io/docs/why-brunch
注意:Phoenix v1.4(在撰寫本文時尚未發布)使用 WebPack 進行資產編譯,請參閱:CHANGELOG.md
熟悉「啟動和運行」(官方)指南:https://hexdocs.pm/phoenix/up_and_running.html#content
一旦你安裝了phoenix並遵循官方的「啟動和運行」指南,
回來嘗試這些適合初學者的範例:
我們建議人們購買(或借用)@chrismccord 的書:《Programming Phoenix》
請參閱:https://pragprog.com/book/phoenix14/programming-phoenix-1-4
作者個人都令人印象深刻,但總的來說,他們對鳳凰城的全面報道是無人能及的! Chris創建了Phoenix,José 創建了 Elixir,Bruce 是經驗豐富的技術作者,擁有許多成功的書籍!
(即:這本書是如何學習 Phoenix 的明顯選擇! )
https://youtu.be/MD3P7Qan3pw
https://youtu.be/srtMWzyqdp8
「 Phoenix提供了 Ruby-on-Rails 的生產力
具有Erlang的並發性和容錯性。
Phoenix 使用Elixir程式語言,這意味著您的應用程式在Erlang 虛擬機器「BEAM」上編譯和運行。
Erlang 是經過實戰考驗的高容錯虛擬機,被許多電信公司使用
WebSockets (「通道」)內建於框架中,這意味著建立具有「即時」通訊和互動的應用程式比幾乎任何其他框架/平台都要容易得多! (無需第三方magic
模組!您需要的一切都已經準備好,可以為數百萬人服務!! )
請參閱:http://www.phoenixframework.org/docs/channels
輕鬆異步,因為 Phoenix ( Elixir ) 中的所有程式設計都是函數式的!這意味著將請求身份驗證、日誌記錄和處理等有用功能抽象化為易於人類閱讀的「管道」非常簡單! (不需要第三方非async
模組!無需託管“承諾”、“生成器”或“可觀察對象”!! )
安全和彈性心態是default
。 Phoenix/Elixir 中的加密(SSL) 很容易,並且內建了SQL 注入緩解、跨站腳本( XSS ) 和CSRF 保護( default
啟用),因此「新手」程式設計師幾乎不可能引入這種類型的安全漏洞。
簡潔的程式碼不可低估!與同等的Node.js/Java/Rails/Go 應用程式相比,我們可以編寫更少的程式碼行,這意味著開發人員的工作效率更高,並且需要維護的程式碼更少!
由於所有控制器的功能編程而具有可測試性!
輕鬆部署:https://hexdocs.pm/phoenix/heroku.html
零停機部署免費! (再次因為 Erlang )。 Erlang 管理將「即時/活躍」用戶從應用程式的舊版本轉換為新版本,而他們甚至沒有註意到它已升級/更新!
透過 Erlang 管理程式對您的應用程式內建監控/管理意味著您確切地知道您的應用程式的執行情況、哪些部分崩潰/重新啟動以及原因!這是我們在其他框架中支付(很多)費用的功能,但在這裡它是免費的!
您能想到使用 Phoenix很棒的另一個原因嗎?
請在此主題中分享您的想法:#13
before
我需要學習 Elixir 嗎?是的。請參閱:https://github.com/dwyl/learn-elixir
不。您今天就可以開始學習/使用 Elixir 並在需要時呼叫 Erlang 函數,
但在使用 Phoenix before
你不需要了解 Erlang!
您/我們可以選擇許多Web 應用程式框架:https://en.wikipedia.org/wiki/Comparison_of_web_frameworks
那為什麼有人會選擇用非「主流」程式語言寫的框架...?
這是錯誤訊息。我們仍然在一些合適的專案中使用 Hapi.js。
這包括多個客戶專案和內部 dwyl 應用程式/工具。
我們決定將 Phoenix 用於我們的新項目,原因如下:
#LessIsMore
#LessButBetter
#SmallIsBeautiful
#SyntaxMatters
對於我們的新項目,我們需要多重資料中心容錯!
我們透過使用Erlang -> Elixir -> Phoenix來「免費」 !
我們認為Hapi.js 仍然是「最好的」Node.js 框架,我們將continue
使用和推薦它
適合需要可擴展且易於維護的簡單應用程式的人。
請參閱:https://github.com/dwyl/learn-hapi
此外,我們仍然在所有 AWS Lambda 微服務中使用 JavaScript,這一點不會改變。
它們簡單、高效且可擴展性非常好!
請參閱:https://github.com/dwyl/learn-aws-lambda
最初的「高效」Web 框架是 2005 年的「Ruby-on-Rails」和「Django」( python )!
(我們在“旅程”中使用過這兩種方法,並且可以談論它們各自的優點!)
使用 Rails 或 Django “沒有什麼問題”。
我們認為這兩個框架仍然有許多用例。
我們只知道建立「即時」要容易得多
與 Phoenix 一起,因為“通道”( WebSockets )已經內置,
Elixir/Erlang 並發是完全不同的遊戲!
Erlang(以及 Phoenix)可以在單一伺服器上處理數百萬並髮用戶,
而 Rails/Django 伺服器只能處理幾千個(最多!)
如果您的應用程式一次只能為數千人提供服務,那麼您沒問題!
我們喜歡Erlang 使用「輕量級長壽命」進程這一事實,
這意味著我們可以連接數百萬個 ( IoT ) 設備...對於 IoT,Erlang 是(毫無疑問)答案!
對於每天只需要幾個用戶的簡單 Web 應用程序,Rails/Django 仍然可行。
但如果沒有必要,為什麼要妥協呢?
如果你能以福特福克斯的“價格”擁有一輛特斯拉,你為什麼不呢?
當您可以輕鬆擁有/使用最好的東西時,為什麼要滿足於好的東西呢?
是的,GitHub 仍然在其 Web 應用程式/網站中使用 Rails。
但詢問 GitHub 的任何核心團隊(如果有機會重新開始)他們是否會選擇Rails
2017 年建立 GitHub,看看有多少人說「是的,當然」(板著臉… )!
此外,GitHub 在後台做了很多Scale Rails 的事情。
他們的許多新(客戶端)功能都是用 JavaScript 寫的!請參閱:https://github.com/github
底線是:任何東西都可以使用“DevOps”進行擴展,
但是Phoenixdefault
是按比例縮放的,因為 Erlang 是按比例發明的!
「有兩種程式語言 - 一種是沒人使用的語言,另一種是每個人都在抱怨的語言」~ Bjarne Stroustrup(
C++
的創建者)
圍棋很受歡迎。很大程度上是因為谷歌“贊助”了它。
它的目的是簡化(取代)Google 內部的C++
和 Java...
在大多數情況下,它已經成功了!
我們真的很喜歡Go。在決定使用哪種程式語言時,這是我們的“第二”選擇
(在 Elixir 之後)在我們的“後 JS 堆疊”中...使用elixir
而不是else
任何東西的決定很簡單:
延伸閱讀:
Play
框架來代替......?如果您已經習慣寫 Java 或部署到 JVM,那麼 Play Framework 是一個絕佳的選擇:https://www.playframework.com
Scala是一門很好的程式語言,每個人都應該學習它! https://www.scala-lang.org/what-is-scala.html
我們已經使用過 Play 幾次(在採用 Node.js 之前)並且非常喜歡它!
但 Scala 是一種「廚房水槽」(多範式)程式語言,它允許人們使用「 Java 的一切」…
我們認為 Scala 的「Java 互通性」意味著它「太容易」讓程式碼庫變得複雜。特別是「OOP 突變」...
那為什麼我們 (DWYL) 不再在新專案中使用「Play」呢?首先,我們幾年前轉向了 Hapi.js ( Node.js ),因為它更加“輕量級”,並且允許我們編寫僅使用幾兆 RAM 的小型程式(其中我們的 Play 應用程式非常消耗資源)。 .!
選擇 Phoenix 而不是 Play 的「原因」總結:
我們只是認為對於我們的專案來說, Erlang 的並發模型效果更好,並且轉換不可變資料的功能程式碼更容易測試和維護。
如果您有證據表明“ Scala 更簡單”,我們很樂意聽取您的意見!
告訴我們:https://github.com/dwyl/learn-phoenix-web-development/issues
如果你這麼喜歡函數式程式設計( FP ),為什麼不使用 Haskell?