Evented Rendering で、ページを適切に更新する方法が思いつかなくてしばらく考えてたら思いついてやつ
通常の(HTTP サーバーモデル)レンダリングでは、ユーザーのリクエストを基にレンダラがサーバー内のリソースを持ってきてページを描画するが、 Evented Rendering ではリソースの更新を基にページの描画が行われる。 ここでは、次のようなことが問題になる。
- リソースの更新は、どのページの描画を発火させるのか?
- 更新によって不要になったページのデータは、どうやって破棄するのか?
このアルゴリズムは、これらの問題を解決する。
サーバー内に存在する何らかのリソース。DBのレコードでもいいし、単なるファイルでもいいが、**ユニークな ID **を持つ。
URL を持ち、実際に CDN に格納されるデータ。管理情報として、リソースへの依存を持つ。
何らかのイベントが発生し、リソースが更新(追加、削除も含む)されたとする。
これらのリソースを記録し(updated_resources
とする)、次に進む。
updated_resources
に含まれるリソースを依存に含むページを削除する。
! 実装上の注意 1 ! 更新処理中のアクセスを可能にするため、この時点での削除はオリジンでのみ行い、CDN からのパージは処理の最後に行うとよい。
! 実装上の注意 2 ! キーを指定してパージできる CDN を利用する場合、リソースの ID をキーに指定すると楽。
update_resources
に含まれるリソースのうち、削除されていないものを1つ1つ処理して生成するページの URL を決定する。
レンダラに URL を与え、ページを生成し、保存する。このとき、描画に使用したリソースを依存とする。