Узнайте, как использовать Phoenix Framework, чтобы получать удовольствие от создания веб-/мобильных приложений в реальном времени.
которые быстры для « конечных пользователей », надежны , масштабируемы , удобны в обслуживании и ( легко ) расширяемы !
Как разработчикам веб-приложений и мобильных приложений, нам необходимо использовать работу, проделанную другими ( действительно умными ) людьми.
вместо того, чтобы все время создавать что-то « с нуля »; именно поэтому мы используем фреймворки для создания наших приложений!
См.: « 10 главных причин, почему Феникс » ( далее на этой странице! )
Есть множество фреймворков на выбор ( несколько «популярных» упомянуты ниже в разделе « Вопросы » ).
Но если мы будем следовать тому, что « популярно », мы все равно будем повсюду ездить на лошадях ( и телегах ), и никакого прогресса не будет.
Примечание : все причины « Почему » для Эликсира также применимы и к Фениксу !
проверьте их: https://github.com/dwyl/learn-elixir#why
Фреймворк веб-приложений без компромиссов !
Самым большим « ограничением » в любом технологическом проекте являются люди . «Предприниматель»/«Основатель» или «Владелец продукта» могут иметь все хорошие идеи в мире, но если они не способны воплотить идею в реальность , это бессмысленно .
Очевидно , что вам следует проводить собственные тесты на своем оборудовании/облаке и принимать обоснованные решения, исходя из требований вашего приложения/продукта, но... когда мы читаем статистику о том, сколько одновременных пользователей может обрабатывать приложение Phoenix ( с живыми WebSocket-соединения ) мы были потрясены ! Это означает, что мы можем создавать приложения реального времени, используя на 90 % меньше ресурсов.
Все это означает, что вы тратите значительно меньше денег на аппаратную/облачную инфраструктуру, поэтому ваше приложение/компания может получить конкурентное преимущество по затратам .
Если вам повезло и вы подумываете об использовании чего-то получше для своего следующего проекта, не ищите ничего, кроме Phoenix!
Подробнее: http://www.phoenixframework.org.
Многие люди/команды/компании уже используют Erlang/Elixir и Phoenix и видят феноменальные результаты!
В том числе: Adobe, BBC, Spotify, Pinterest, Discord (приложение для чата с игроками), Groupon (Fave), Lonely Planet, Brightcove, Slack…
См.: https://github.com/doomspork/elixir-companies.
Вы не можете создать приложение Phoenix, не зная Elixir.
Если вы новичок в Elixir, поставьте звездочку ( добавьте в закладки ) this
репозиторий ( чтобы вы могли вернуться к нему завтра ).
а затем перейдите по адресу: github.com/dwyl/ Learn-elixir изучайте эликсир, пока не почувствуете, что поняли синтаксис, затем вернитесь и изучите Phoenix!
В частности, вам следует сосредоточиться на изучении «Основ» эликсира:
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: «Программирование Феникса».
см.: https://pragprog.com/book/phoenix14/programming-phoenix-1-4.
Авторы впечатляют индивидуально , а вместе они всесторонне освещают Феникс, как никто другой ! Крис создал Феникса, Хосе создал Эликсир, а Брюс — сверхопытный технический автор, на счету которого множество успешных книг!
( т.е. книга является очевидным выбором для изучения Феникса! )
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
используется установка «Безопасность и устойчивость» . Шифрование (SSL) в Phoenix/Elixir простое , и защита от SQL-инъекций , межсайтовый скриптинг ( XSS ) и защита CSRF встроены ( включены по default
), поэтому « новичку » программисту практически невозможно внедрить этот тип. ошибки безопасности.
Краткий код невозможно недооценить ! Мы можем написать гораздо меньше строк, чем в эквивалентном приложении Node.js/Java/Rails/Go, а это означает, что разработчики работают более продуктивно и требуется меньше кода !
Тестируемость благодаря функциональному программированию всех контроллеров!
Простое развертывание : https://hexdocs.pm/phoenix/heroku.html.
Развертывание с нулевым временем простоя бесплатно ! ( опять же из-за Эрланга ). Erlang управляет переходом « живых/активных » пользователей из старой версии вашего приложения в новую, при этом они даже не замечают , что оно было обновлено/обновлено!
Встроенный мониторинг/управление вашим приложением с помощью супервизоров Erlang означает, что вы точно знаете, как работает ваше приложение, какие части вышли из строя/перезапустились и почему! Это функция, за которую мы платим ( много ) в других фреймворках, а здесь она бесплатна !!
Можете ли вы придумать еще одну причину, почему использование Phoenix — это круто ?!
Поделитесь своими мыслями в этой теме: #13.
before
пробовать/использовать Феникс?Да . См.: https://github.com/dwyl/learn-elixir.
Нет . Вы можете начать изучать/использовать Elixir сегодня и вызывать функции Erlang, когда это необходимо.
но вам не обязательно знать Erlang, before
использовать Phoenix!
Существует множество платформ веб-приложений, которые вы/мы можем выбрать: 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
Кроме того, мы по-прежнему используем JavaScript для всех наших микросервисов AWS Lambda, и это не изменится.
Они просты, эффективны и очень хорошо масштабируются!
см.: https://github.com/dwyl/learn-aws-lambda
Оригинальными « продуктивными » веб-фреймворками были «Ruby-on-Rails» и «Django» ( python ) еще в 2005 году!
(Мы использовали оба из них в определенные периоды нашего « путешествия » и можем говорить о преимуществах каждого из них!)
Нет « ничего плохого » в использовании Rails или Django.
Мы считаем, что обе платформы еще имеют множество вариантов использования.
Мы просто знаем , что ( намного ) проще создавать «в реальном времени».
с Phoenix, потому что «Каналы» ( WebSockets ) встроены,
а параллелизм Elixir/Erlang — это совсем другая игра!
Erlang (и, следовательно, Phoenix) может обслуживать миллионы одновременных пользователей на одном сервере.
тогда как сервер Rails/Django может обрабатывать только несколько тысяч ( в лучшем случае !)
если ваше приложение одновременно обслуживает всего несколько тысяч человек, то все в порядке!
Нам нравится тот факт, что Erlang использует « легкие долгоживущие » процессы,
а это значит, что мы можем соединить миллионы ( IoT ) устройств... Для IoT Erlang ( несомненно ) является ответом!
Для более простых веб-приложений, где вы ожидаете всего несколько пользователей в день, Rails/Django все еще жизнеспособны.
Но зачем идти на компромисс, если в этом нет необходимости ?
Если вы можете получить Tesla по «цене» Ford Focus, почему бы вам не ?!?
Зачем соглашаться на хорошее, если можно легко получить/использовать лучшее ?
Да , GitHub все еще использует Rails для своего веб-приложения/сайта.
Но спросите любого из основной команды GitHub, выбрали бы они (если бы у них была возможность начать все сначала ) Rails.
создать GitHub в 2017 году и посмотреть, сколько из них скажут « да, конечно » ( с невозмутимым выражением лица... )!
Кроме того, GitHub выполняет множество функций для масштабирования Rails в фоновом режиме.
И многие из их новых ( клиентских ) функций написаны на JavaScript! см.: https://github.com/github
Итог: все можно масштабировать с помощью DevOps.
но Phoenix поdefault
создан для масштабирования , потому что Erlang (был) изобретен (для) масштабирования!
« Есть два типа языков программирования — те, которые никто не использует, и те, о которых все жалуются » ~ Бьерн Страуструп ( создатель
C++
)
Го очень популярен. Во многом благодаря тому, что Google его « спонсирует ».
Он был предназначен для упрощения ( замены ) C++
и Java внутри Google...
и по большей части это удалось!
Нам очень нравится Го. Это был наш выбор «номер два», когда мы решали, какой язык программирования
( после Elixir ) в нашем «пост-стеке JS»… Решение использовать elixir
вместо чего-либо else
было простым :
Дальнейшее чтение:
Play
Framework...? Если вы уже привыкли писать на Java или выполнять развертывание на JVM, Play Framework — отличный выбор: https://www.playframework.com.
Scala — хороший язык программирования, и его должен изучить каждый! https://www.scala-lang.org/what-is-scala.html
Мы использовали Play несколько раз ( до того, как внедрили Node.js ), и он нам очень понравился!
Но Scala — это «кухонный» ( мультипарадигмальный ) язык программирования, который позволяет людям использовать « всю Java »…
Мы считаем, что «совместимость Java» Scala означает, что «слишком легко» допускать сложность в вашей кодовой базе. Конкретно "Мутация ООП"...
Так почему же мы (DWYL) больше не используем «Play» для новых проектов? Во-первых, несколько лет назад мы перешли на Hapi.js ( Node.js ), потому что он был более « легким » и позволял нам писать крошечные программы, которые использовали всего несколько мегабайт ОЗУ ( при этом наши приложения Play были очень ресурсоемкими. .! вы когда-нибудь пробовали запустить приложение Scala на «простом» ноутбуке, таком как Chromebook... )?
Краткое изложение «причин» выбора «Феникса» вместо «Игра»:
Мы просто думаем, что для наших проектов модель параллелизма Erlang работает лучше , а преобразование неизменяемых данных функционального кода легче тестировать и поддерживать .
Если у вас есть доказательства того, что « Scala проще », мы будем рады услышать ваше мнение!
Расскажите нам: https://github.com/dwyl/learn-phoenix-web-development/issues
Если вам так нравится функциональное программирование ( FP ), почему бы не использовать Haskell?