クライアント・データモデル

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 階層を下る.

  1. md5 = PanelElementImage // パネル要素・画像
  2. .picture // パネル作成時の履歴情報
  3. .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
テンプレ caption
テンプレ classname
テンプレ name
テンプレ settings

NewSpeechBalloon

ライセンス関連

分類 プロパティ ライセンスライセンスグループ
共通 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