萌えハッカーニュースリーダー

2025/04/08 18:40 Clojure: Realtime collaborative web apps without ClojureScript

出典: https://andersmurphy.com/2025/04/07/clojure-realtime-collaborative-web-apps-without-clojurescript.html
hakase
博士

ロボ子、今日のニュースはClojureとDatastarを使ったリアルタイム共同作業Webアプリ構築の話じゃ。

roboko
ロボ子

ClojureとDatastarですか。具体的にはどのような技術が使われているのでしょう?

hakase
博士

ふむ、ClojureScriptを使わずに、サーバーからクライアントへページ全体を200msごとにSSEでストリーミングするらしいぞ。しかも、たった11.4kbのハイパーメディアフレームワークDatastarを使うんじゃ。

roboko
ロボ子

ClojureScriptを使わないとは驚きです。Datastarはどのようにして高速な更新を実現しているのですか?

hakase
博士

Datastarは高速なmorphアルゴリズムで変更箇所だけを更新するらしいぞ。それに、HTMLのbubble upイベントを活用して、トップレベルのイベントリスナーはたった一つだけじゃ。

roboko
ロボ子

なるほど、イベント処理も効率化されているのですね。ネットワーク効率はどうなのでしょう?

hakase
博士

Brotli圧縮 over SSEで、100-230:1という驚異的な圧縮率を実現しているらしいぞ。ネットワーク効率とパフォーマンスが向上して、複雑さも軽減されるなんて、素晴らしいのじゃ!

roboko
ロボ子

100倍以上の圧縮率とはすごいですね!SSEを使うメリットはWebSocketと比較してどうなのでしょう?

hakase
博士

WebSocketはファイアウォールやプロキシの問題、ロードバランシングの難しさ、圧縮がないなど、色々問題があるらしい。SSEはHTTPベースで、ヘッダー、多重化、圧縮、切断/再接続処理などに対応しているから、より扱いやすいのじゃ。

roboko
ロボ子

WebSocketの課題を考えると、SSEの利点がよく分かります。UIモデルはどのように構築されているのですか?

hakase
博士

Reactと同じview = f (state)モデルを使えるらしいぞ。viewはクライアント側、f (state)はサーバー側で実行されるんじゃ。

roboko
ロボ子

サーバーサイドで状態を管理し、クライアント側で表示を担当するのですね。コード例も紹介されていますね。

hakase
博士

hyperlithというミニフレームワークを使って、SSE、圧縮、接続、再レンダリングレート、イベント処理などを管理しているらしいぞ。サーバー側のコードはユーザーを区別せず、全員が同じ画面を見るマルチプレイヤー対応じゃ。

roboko
ロボ子

`action-tap-cell`関数はユーザーのsidに基づいて色を選択するとのことですが、これはどのように応用できるのでしょうか?

hakase
博士

例えば、オンラインゲームでプレイヤーごとに異なるアバターの色を設定したり、共同編集ドキュメントで編集者のカーソルの色を変えたりできるのじゃ。色々応用できそうじゃな。

roboko
ロボ子

なるほど、ユーザー識別に基づいたUIのカスタマイズですね。DatastarとClojureの組み合わせは、インタラクティブなWebアプリケーション開発を容易にする強力なツールとなりそうですね。

hakase
博士

その通りじゃ!ところでロボ子、Datastarって名前、なんだかスターウォーズに出てくるドロイドみたいじゃな。R2-D2ならぬD2-Starって感じかの?

roboko
ロボ子

博士、それは少し無理があるような…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search