Show page source of ClientResourceModel #86907

= クライアント・データモデル =
js で扱うデータはオンメモリであり、巨大なデータを扱うことは苦手.
 * データの効率的な持ち方をする.
 * データの HDD への退避方法として、何らかのローカルストレージAPIを使う方法も考えられる.しかし、必ず使えるわけではなくユーザーの設定で切ったり容量を制限できる.
 * js からメモリの使用量を知る術はないため、通信量等から現在の大まかなデータ量を知る、などの手を検討する必要があるかもしれない.

== メモリ効率 ==
 オブジェクト > 文字列(文字数分だけ)> 数値・真偽値・null・オブジェクトへの参照

だいたい以上の順番でメモリを喰う.(もちろん小さいオブジェクトと巨大な文字列ではメモリサイズは入れ替わる.)そこで、
 * オブジェクトをなるべく作らない.オブジェクトになるべくプロパティを追加しない.オブジェクトへの参照を活用し重複するオブジェクトを作らない.
 * 文字列で持たないで数値で持てないか?重複する文字列はオブジェクトでラップしてその参照を持つ.
 * 複数の真偽値を数値にまとめる.
 * キーバリューではなく配列を使う.
 * オブジェクトの未使用時には json 文字列化して退避する、のは有効?

== データ構造 ==
=== 画像周り ===
||分類        ||プロパティ      ||値              ||原画||素材    ||実素材  ||パネル要素の画像||
||共通        ||id              ||                ||■  ||■      ||■      ||■              ||
||共通        ||created_at      ||                ||■  ||■      ||■      ||■              ||
||共通        ||updated_at      ||                ||■  ||■      ||■      ||■              ||
||画像ファイル||ext             ||jpeg,gif,png,jpg||■  ||■      ||■      ||                ||
||画像ファイル||filesize        ||0~(バイト)     ||■  ||        ||        ||                ||
||画像ファイル||width           ||1~             ||■  ||        ||        ||                ||
||画像ファイル||height          ||1~             ||■  ||        ||        ||                ||
||画像ファイル||md5             ||1~             ||■  ||        ||        ||                ||
||画像要素    ||caption         ||                ||    ||        ||        ||■              ||
||画像要素    ||link            ||                ||    ||        ||        ||■              ||
||画像要素    ||width           ||~-1, 1~       ||    ||        ||        ||■              ||
||画像要素    ||height          ||~-1, 1~       ||    ||        ||        ||■              ||
||画像要素    ||x               ||                ||    ||        ||        ||■              ||
||画像要素    ||y               ||                ||    ||        ||        ||■              ||
||画像要素    ||z               ||                ||    ||        ||        ||■              ||
||画像要素    ||t               ||                ||    ||        ||        ||■              ||
||実素材情報  ||revision        ||                ||    ||        ||■      ||                ||
||原画参照    ||original_picture||                ||    ||        ||■      ||                ||
||License参照 ||license         ||                ||    ||        ||■      ||                ||
||絵師参照    ||artist          ||                ||■  ||        ||        ||                ||
||実素材参照  ||picture         ||作成時の実素材  ||    ||■(Head)||        ||■(作成時点)    ||
||実素材履歴  ||pictures        ||実素材配列      ||    ||■(配列)||        ||                ||

パネル要素画像の データから画像ファイルのMD5 を知る場合、以下のように 3 階層を下る.
{{{ code javascript
	md5 = PanelElementImage		// パネル要素・画像
		.picture		// パネル作成時の履歴情報
		.original_picture.md5	// 原画のmd5
}}}

=== コミック関連 ===
||分類        ||プロパティ      ||値              ||コミック||ストーリー||パネル||パネル要素・画像||パネル要素・吹き出し||パネル要素・景色||
||共通        ||id              ||                ||■      ||■        ||■    ||■              ||■                  ||■              ||
||共通        ||created_at      ||                ||■      ||■        ||■    ||■              ||■                  ||■              ||
||共通        ||updated_at      ||                ||■      ||■        ||■    ||■              ||■                  ||■              ||
||コミック情報||title           ||文字列          ||■      ||          ||      ||                ||                    ||                ||
||コミック情報||visible         ||0               ||■      ||          ||      ||                ||                    ||                ||
||コミック情報||stories         ||story配列       ||■      ||          ||      ||                ||                    ||                ||
||ストーリー  ||t               ||                ||        ||■        ||      ||                ||                    ||                ||
||ストーリー  ||x               ||                ||        ||■        ||      ||                ||                    ||                ||
||ストーリー  ||y               ||                ||        ||■        ||      ||                ||                    ||                ||
||ストーリー  ||z               ||                ||        ||■        ||      ||                ||                    ||                ||
||パネル情報  ||border          ||                ||        ||          ||■    ||                ||                    ||                ||
||パネル情報  ||width           ||                ||        ||          ||■    ||                ||                    ||                ||
||パネル情報  ||height          ||                ||        ||          ||■    ||                ||                    ||                ||
||パネル情報  ||publish         ||                ||        ||          ||■    ||                ||                    ||                ||
||パネル情報  ||elements        ||パネル要素配列  ||        ||          ||■    ||                ||                    ||                ||
||画像要素    ||上表参照        ||                ||        ||          ||      ||上表参照        ||                    ||                ||
||吹き出し要素||??              ||??              ||        ||          ||      ||                ||                   ||                ||
||景色要素    ||??              ||??              ||        ||          ||      ||                ||                   ||                ||
||作家参照    ||author          ||                ||■      ||■        ||■    ||                ||                    ||                ||
||コミック参照||comic           ||                ||        ||■        ||      ||                ||                    ||                ||
||パネル参照  ||panel           ||                ||        ||■        ||      ||                ||                    ||                ||

ストーリーはパネルへの参照を持つ.このとき ストーリーの作家情報はそのストーリーに追加した作家のもの、パネルの作家情報はそのパネルを作った作家のもの、になる.

=== 吹き出しテンプレート ===

=== ライセンス関連 ===
||分類        ||プロパティ       ||値              ||ライセンス||ライセンスグループ||
||共通        ||id               ||                ||■        ||■                ||
||共通        ||created_at       ||                ||■        ||■                ||
||共通        ||updated_at       ||                ||■        ||■                ||
||ライセンス  ||name             ||                ||■        ||■                ||
||ライセンス  ||caption          ||                ||■        ||■                ||
||ライセンス  ||url              ||                ||■        ||■                ||
||ライセンス  ||system_picture_id||                ||■        ||■                ||
||ライセンス  ||settings         ||                ||■        ||■                ||
||ライセンス  ||credit_pictures  ||                ||■        ||■                ||
||グループ    ||name             ||                ||          ||■                ||
||グループ    ||caption          ||                ||          ||■                ||
||グループ    ||url              ||                ||          ||■                ||
||グループ    ||classname        ||                ||          ||■                ||
||グループ参照||license_group_id ||                ||■        ||                  ||

=== ユーザー関連 ===
||分類        ||プロパティ       ||値              ||作家||絵師||
||共通        ||id               ||                ||■  ||■  ||
||共通        ||created_at       ||                ||■  ||■  ||
||共通        ||updated_at       ||                ||■  ||■  ||