【要約】Chrome 150に追加された宣言的部分更新でJavaScriptを一切書かずにスライドショーアプリを作る [Zenn_Python] | Summary by TechDistill
// Problem
- ・
location.reload()を用いると、画像のみの更新であってもHTML全体を再送する。 - ・
<head>やCSS、ページ全体の構造まで再送するため、通信帯域を無駄に消費する。 - ・クライアント側で更新タイミングを制御するために、JavaScriptの実装が不可欠となる。
- ・ページ全体を再読み込みするため、ユーザー体験における一瞬の白飛びが発生しやすい。
- ・これらは、低帯域な環境やシビアなUXが求められる現場において、大きなペインポイントとなる。
// Approach
- ・
StreamingResponseを使い、HTML接続を維持したまま追加のHTML断片を流し込む。 - ・
<?start name="memory">等の処理命令で、更新対象となるHTMLの範囲を明示する。 - ・
<template for="memory">を用いて、既存の範囲をパッチとして宣言的に差し替える。 - ・サーバー側の
asyncio.sleep(3)により、ブラウザ側のJSなしで更新間隔を制御する。 - ・
X-Accel-Buffering: noを付与し、リバースプロキシによるバッファリングを回避する。
// Result
- ・JSによるDOM操作や状態管理を完全に排除し、サーバー主導の更新を実現した。
- ・画像部分のみを差分として送るため、通信量と再描画のコストを削減した。
- ・サーバー側の非同期ジェネレーターにより、ストリームの制御を簡潔に行える。
- ・ブラウザの読み込みインジケーターが完了しない等の特性はあるが、動的なUI構築に成功した。
- ・これにより、HTMLをアプリケーション更新のプロトコルとして直接利用できる可能性を示した。