🎉

軽量プロセスとPhoenix LiveView

2024/06/04に公開

動画

https://www.youtube.com/watch?v=u5WuTjHpN4A

2024年5月17日(木曜日)に東京浜松町・大門で開催されたElixir/Phoenix入門セミナー(daimon.ex)での発表です。

https://daimon-ex.connpass.com/event/312959/

スライド

https://speakerdeck.com/kuroda1968/qing-liang-purosesuto-phoenix-liveview

LinuxのプロセスとElixirの軽量プロセス

  • プログラミング言語Elixirで書かれたプログラムが起動されると、それは仮想マシンBEAMの中で動く。
  • 仮想マシンBEAM自体は、Linuxのプロセスである。
  • Elixirの軽量プロセスは、仮想マシンBEAM(=Linuxプロセス)の内部で生まれる。
  • 軽量プロセスは、生成にかかる時間が短く、メモリの使用量が少ない。

メッセージパッシング

  • 軽量プロセスは受信箱を持ち、互いの受信箱に向けてメッセージを送り合うことができる(メッセージパッシング)。
  • 軽量プロセスは受信箱に届いたメッセージを順に処理していく。
  • メッセージの処理は逐次処理。先に届いたものの処理が終わるまで、次には進まない。排他制御が不要。

LiveViewは軽量プロセスである

  • LiveViewを用いたPhoenixアプリケーションでは、ブラウザ側のLiveSocketオブジェクトとサーバー側のLiveView(軽量プロセス)がWebSocketで接続する。
  • ブラウザの数と同じ数のLiveViewが作られる。
  • LiveSocketオブジェクトはJavaScriptのオブジェクト。
  • 両者はWebSocketで接続しているので、常にどちらの方向に対してもメッセージを送信できる。

LiveViewソケットはアプリケーションの「状態」を持つ

  • 個々のLiveView(軽量プロセス)は、内部に「LiveViewソケット」を持つ。
  • LiveViewソケットはアプリケーションの「状態」を保持する。
  • アプリケーションの「状態」からブラウザの画面を描画するためのHTML文書を生成できる。

LiveViewとReact

  • 状態を保持する場所が異なる: LiveViewはサーバー側、Reactはブラウザ側
  • データを同期する方法が異なる: LiveViewはプッシュ型、Reactはプル型

Discussion