Skip to content

Instantly share code, notes, and snippets.

@tosuke
Created July 21, 2019 16:30
Show Gist options
  • Save tosuke/e0378fc151736eeefc05ad6e35f3259c to your computer and use it in GitHub Desktop.
Save tosuke/e0378fc151736eeefc05ad6e35f3259c to your computer and use it in GitHub Desktop.

Evented Rendering での更新アルゴリズム

これは何

Evented Rendering で、ページを適切に更新する方法が思いつかなくてしばらく考えてたら思いついてやつ

何が問題なの

通常の(HTTP サーバーモデル)レンダリングでは、ユーザーのリクエストを基にレンダラがサーバー内のリソースを持ってきてページを描画するが、 Evented Rendering ではリソースの更新を基にページの描画が行われる。 ここでは、次のようなことが問題になる。

  1. リソースの更新は、どのページの描画を発火させるのか?
  2. 更新によって不要になったページのデータは、どうやって破棄するのか?

このアルゴリズムは、これらの問題を解決する。

登場人物

リソース

サーバー内に存在する何らかのリソース。DBのレコードでもいいし、単なるファイルでもいいが、**ユニークな ID **を持つ。

ページ

URL を持ち、実際に CDN に格納されるデータ。管理情報として、リソースへの依存を持つ。

アルゴリズム

リソースの更新

何らかのイベントが発生し、リソースが更新(追加、削除も含む)されたとする。 これらのリソースを記録し(updated_resources とする)、次に進む。

ページの削除

updated_resources に含まれるリソースを依存に含むページを削除する。

! 実装上の注意 1 ! 更新処理中のアクセスを可能にするため、この時点での削除はオリジンでのみ行い、CDN からのパージは処理の最後に行うとよい。

! 実装上の注意 2 ! キーを指定してパージできる CDN を利用する場合、リソースの ID をキーに指定すると楽。

生成するページの決定

update_resources に含まれるリソースのうち、削除されていないものを1つ1つ処理して生成するページの URL を決定する。

ページの生成

レンダラに URL を与え、ページを生成し、保存する。このとき、描画に使用したリソースを依存とする。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment