了解如何使用 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 应用程序非常消耗资源)。 .!您是否尝试过在 Chromebook 等“基本”笔记本电脑上运行 Scala 应用程序...?
选择 Phoenix 而不是 Play 的“原因”总结:
我们只是认为对于我们的项目来说, Erlang 的并发模型效果更好,并且转换不可变数据的功能代码更容易测试和维护。
如果您有证据表明“ Scala 更简单”,我们很乐意听取您的意见!
告诉我们:https://github.com/dwyl/learn-phoenix-web-development/issues
如果你这么喜欢函数式编程( FP ),为什么不使用 Haskell?