LINUX.ORG.RU

Веб-фреймворк Phoenix 1.6.0

 ,


0

2

Phoenix — веб-фреймворк на языке программирования Elixir, призванный обеспечить высокую производительность веб-приложений.

Основой фреймворка является движок LiveView, который обеспечивает возможность обновления DOM на стороне сервера с помощью долгоиграющего WebSocket-соединения, что позволяет писать интерактивные веб-приложения без использования JavaScript.

Нововведения:

  • Команда phx.gen.auth, позволяющая добавить готовые функции аутентификации в приложение.
  • В состав Phoenix включена библиотека для работы с электронной почтой Swoosh.
  • Вместе с обновлённой LiveView 0.16 Phoenix получил новый движок для рендера HTML-шаблонов — HEEx. В сравнении со старым движком (EEx), HEEx предоставляет:
    • Поддержку HTML-атрибутов. Т.к. HEEx должен разбирать и проверять структуру HTML, конструкции <%= ... %> и <%= ... %> нужно использовать только для интерполяции содержимого тегов и не могут применяться в самой разметке. Вместо: <div class="<%= @class %>">...</div>, следует писать: <div class={@class}>...</div>.
    • Проверку структуры шаблона на этапе компиляции.
    • Минимизацию количества передаваемых данных.
    • HTML-подобную нотацию, для вставки функциональных компонентов. Пример:
<MyApp.Weather.city name="Kraków"/>

# где сам компонент имеет следующий вид:

defmodule MyApp.Weather do
  use Phoenix.Component

  def city(assigns) do
    ~H"""
    The chosen city is: <%= @city %>.
    """
  end

  def country(assigns) do
    ~H"""
    The chosen country is: <%= @country %>.
    """
  end
end
  • Появился механизм привязки к этапам жизненного цикла LiveView (lifecycle hooks).

  • Новый макрос live_session, позволяющий осуществлять навигацию через существующие WebSocket-соединения, что помогает избежать лишних HTTP-запросов и значительно ускоряет навигацию.

  • Сборка JS и CSS теперь осуществляется без Node и Webpack, которые годами создавали проблемы в части поддержки проекта.

>>> Подробности

★★★★

Проверено: Satori ()

В Perl’е я что-то типа полубога, а здесь рядовой писюн. Так что не судите строго. Надеюсь интересно будет. Elixir - здравый язычок и фреймворки интересные :3

perl5_guy ★★★★ ()
Ответ на: комментарий от perl5_guy

Обычно фреймверк призванный обеспечить высокую скорость по факту или тормознее всех предыдущих вместе взятых, или ничего не может толком. Надеюсь что хоть здесь будет не так.

anonymous ()
Ответ на: комментарий от anonymous

чё за дела, 1.6 ещё и рядом не вышел!?

anonymous ()
Ответ на: комментарий от vs240

Синтаксис чего? Шаблоны везде всрато выглядят так-то.

perl5_guy ★★★★ ()
Ответ на: комментарий от e1nste1n

Навскидочку интересно. Посмотрю завтра на свежую голову. Сябки.

perl5_guy ★★★★ ()

хорошая замена рельс, хоть и монолитное

umren ★★★★★ ()

за LiveView кстати отдельное уважение ;) жабаскрипт нужно выжигать всеми доступными способами.

umren ★★★★★ ()
Ответ на: комментарий от perl5_guy

Elixir - здравый язычок и фреймворки интересные :3

А я правильно понимаю, что инфраструктуру этого языка точат в основном под веб, и писать на нём GUI-приложение, да ещё и однопоточное, смысла особо нет?

apt_install_lrzsz ()
Ответ на: комментарий от javascript

Этот же вопрос задавали представители одного известного народа на похожее утверждение одного неудавшегося художника.

Посыл там был: «Виноваты во всех бедах!»

apt_install_lrzsz ()
Ответ на: комментарий от apt_install_lrzsz

Элексир — это грубо говоря обновлённый Erlang, выполняющийся на той же виртуальной машине Beam, которая в свою очередь заточена на сети, конкурентность и распределенщину.

На нем ещё кое как можно писать консольные утилиты. И GUI технически тоже можно, насколько я знаю там биндинг в wxWidgets из коробки. Но зачем?

filosofia ()
Ответ на: комментарий от filosofia

сети, конкурентность и распределенщину.

Изначальное назначение Erlang, как я понимаю.

… можно … Но зачем?

Собственно, я понимаю, что и консольные и гуи (при большом желании) можно писать на любом языке. Мой вопрос именно о предполагаемой по мнению разработчиков и сообщества языка нише.

Я сам очень далёк от веба. Вот и интересуюсь общими вопросами.

apt_install_lrzsz ()

Веб-фреймворк Phoenix 1.6.0

Версия 1.6.0 ещё не вышла, это новость о релиз-кандидате под номером 0, кто-то по ссылке так и не перешёл :)

Основой фреймворка является движок LiveView

LiveView ну точно не является основой Phoenix, оно можно сказать недавно из экспериментального статуса вышло.

что позволяет писать интерактивные веб-приложения без использования JavaScript

JavaScript там точно используется внутри самого LiveView, просто конечному программисту его писать не придётся (на практике — почти не придётся).

theNamelessOne ★★★★★ ()

Содрали Blazor у Microsoft?

anonymous ()
Ответ на: комментарий от apt_install_lrzsz

Хосе Валим (создатель языка) наоборот пытается как можно сильнее диверсифицировать Elixir. С помощью Elixir’а, Erlang-сообщество получило доступ к мейнстримной веб-разработке, но этим всё ограничиться не должно. В экосистему уже тащат функционал нейроных сетей и по другим направлениям будет работа. Просто язык ещё молодой и пока киллерфитчи находятся в основном в области веба. Отсюда такое впечатление.

perl5_guy ★★★★ ()
Ответ на: комментарий от theNamelessOne

просто конечному программисту его писать не придётся

Я думаю это очевидно и так

perl5_guy ★★★★ ()
Ответ на: комментарий от apt_install_lrzsz

инфраструктуру этого языка точат в основном под веб

не только веб, а в целом бекенд, сервисы, прочее

писать на нём GUI-приложение, да ещё и однопоточное, смысла особо нет?

нет

umren ★★★★★ ()
Ответ на: комментарий от perl5_guy

навряд ли эликсир выйдет за пределы той области применения где себя зарекомендовал эрланг, вм эрланга и отп имеют вполне конкретный фокус

umren ★★★★★ ()
Ответ на: комментарий от perl5_guy

Что в твоем понимании «веб» ? и на эрланге все это прекрасно делалось, просто там никому не нужен был фулл монолитный фреймворк, запроси бегали, деньги мутились

umren ★★★★★ ()
Ответ на: комментарий от javascript

диверсификации на фронте нужна

LiveView показывает, что «можно по другому»

WebAssembly подпирает с другой стороны

но пока этого всего еще мало.

umren ★★★★★ ()
Ответ на: комментарий от umren

На мой взгляд, Erlang чуть ниже по OSI живёт. Он скорее про сам сервер, чем про то что на сервере будет крутиться (это уже Elixir). Тащемта, интервью Erlang’иста смотрел некоторое время взад и он тоже так говорил. Можно конечно писать сайтики на Erlang’е, но это как-то никому не нужно и Elixir отлично вкатился на это место в BEAM-семействе.

perl5_guy ★★★★ ()
Ответ на: комментарий от javascript

Единственная проблема — обработка на стороне клиента.

fernandos ★★★ ()
Ответ на: комментарий от filosofia

Элексир — это грубо говоря обновлённый Erlang, выполняющийся на той же виртуальной машине Beam

Эликсир — это, грубо говоря, попытка не писать на Эрланге, а писать почти на Руби, но выполняющемся на той же виртуальной машине Beam, со всеми её плюсами и минусами.

OSBuster ()
Ответ на: комментарий от umren

Elixir очень далек от Ruby, первые впечатления очень обманчивы :)

Далёкость Elixir от Ruby обусловлена именно что BEAM и её особенностями и экосистемой. А так Elixir сделан бывшим рубистом, как альтернатива и редизайн использующая преимущества BEAM, и следует принципам Ruby почти везде, где можно следовать. И первое поколение свитчеров это тоже рубисты.

Вот хороший доклад о том с чего всё началось:

https://www.youtube.com/watch?v=4o89mWFL-2A

OSBuster ()

вебсокет этож число потоков сервера всегда == числу клиентов, т.е. он ляжет на второй сотне, и все за то чтобы сгенерить банальный аштиемель

Syncro ★★★★★ ()
Последнее исправление: Syncro (всего исправлений: 1)
Ответ на: комментарий от Syncro

Нет же. В том и мякота. Виртуальная машина создаёт «процессы». Это внутренний термин и с системными процессами ничего общего не имеет. Каждый процесс что-то в районе 20КБайт занимает и замечательно работает это. Сотни тысяч и даже лям-другой соединений работают спокойно.

perl5_guy ★★★★ ()
Ответ на: комментарий от perl5_guy

Эрланг круто, да. Теперь уменьшай число раз в 100-1000, ведь ты не чатик делаешь, а будешь дом перерисовывать для каждого клиента. Вот нахрена это нужно, когда уже есть клиентские фреймворки?

vazgen05 ★★★ ()
Ответ на: комментарий от perl5_guy

пока киллерфитчи находятся в основном в области веба

В сравнении с эрлангом? Тогда не согласен, там отличия в метапрограммировании, синтаксисе попроще и адекватными тулами, а в целом это и есть эрланг.

ddidwyll ★★★ ()
Ответ на: комментарий от perl5_guy

кроме собственно процесса это сетевое соединение удерживаемое сервером, т.е. терабайты будут жрать и выпадать за лимиты процессы ядра. А как насчет поддосить такую архитектурку ?

Syncro ★★★★★ ()
Ответ на: комментарий от Syncro

он ляжет на второй сотне, и все за то чтобы сгенерить банальный аштиемель

Думаю что нет, у нас проект с десятками тысяч процессов со стейтом кучей фоновых задач без проблем работают на простенькой впс.

ddidwyll ★★★ ()
Ответ на: комментарий от perl5_guy

а если мы напишем фронтенд код агрессивно запрашивающий операции рендеринга у сервера, может быть даже встроим туда майнер крипты ?

Syncro ★★★★★ ()

Хорошо что оно развивается, но на мой вкус феникс в большинстве случае не нужен, ставишь плаг, экто и вперёд. Если быстро делать прототип - да может быть удобно, а так скорее мешает.

ddidwyll ★★★ ()
Ответ на: комментарий от vazgen05

Вот нахрена это нужно, когда уже есть клиентские фреймворки?

Лайк. Вещь для лентяев наверно :)

ddidwyll ★★★ ()
Ответ на: комментарий от apt_install_lrzsz

и писать на нём GUI-приложение, да ещё и однопоточное, смысла особо нет?

Это вполне возможно, однопоточного конечно в рамках эрланга ничего нет, даже когда шелл запускаешь у тебя уже несколько процессов. Гуи на wxWidgets вполне неплох и может многое, если у тебя эрланг установлен с ним запусти :wx.demo()

loz ★★★★★ ()
Ответ на: комментарий от kto_tama

Это не принципиальная позиция а дополнительная фича, вполне можно использовать эликсир для более традиционного апи-бекенда.

loz ★★★★★ ()
Ответ на: комментарий от perl5_guy

А исходники программы так же легко получить как яве или дотнете?

wall_jvm ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.