FirestoreからRealtime Databaseへの移行がようやく実現出来た – 開発日記(64)

2023/11/15

Realtime Databaseにしてから、キャンバスの読み込みが遅い。

これはFirestoreから移行するにあたり、単純に同じ処理ではなく、将来の拡張に備えてパーツごとに都度中身を読み取りに行く構造に変えたためだった。たとえばアイディアが100個あれば100回読みに行くことになる。

しかしこれは、遅延処理を使っても予想以上に体感的に遅かった。
(もちろんRealtime DBのせいではなく、やり方の問題)

仕方なく普通にまるごとDBから読み込んで構築する形にしたら劇的に早くなった

無駄もあるのでこの処理もまだまだ最適化したいが、回り道していたらどんどん完成が遅くなる。今回の構造変更ももともとは”大規模なキャンバスの扱い”や”複数人同時作業”を目差した実装だったが、それらで時間が取られていたらDBの乗り換えがいつまでも終わらない。優先度の見極めが必要だ。

2023/11/16

RealtimeDBからの最低限の”読み込み”と画面描画がようやくまともに出来てきた。

それ以外の対応として、アイディアの描画やフォーカスのやり方を変更した。

これまではアイディアごとにFocus()等を使って制御していたが、複数のアイディアをまたがっての処理がすごくやりづらかった。今回フォーカス的な処理と描画を自分で全部管理するようにしてみたら、こちらの方が感覚的に断然やりやすい。実装すべき範囲はまだまだ多いがひとまずこの方式で行ってみようと思う。

2023/11/17~25

引き続きRealTimeDBへの移行に向けた実装(のためのリファクタリングや処理変更)。

毎日のメモをギュッとまとめるとこのような作業を行った。

  • modelとwidget分離の続き
  • アイディアウィジェット軽量化
  • フォーカスの扱い変更
  • 全体の構造変更に伴い、キーボードショートカットが動かなくなっていたり、Undo/Redoが大幅におかしくなっていたりしたのを修正
  • 操作をするたびに即リアルタイムでDB反映する処理

以前に比べるとだいぶ構造が変わってきて、処理を書く前に動作がイメージしやすくなってきた。特にある程度機能が増えてくると、モデルとウィジェットを分離することよる改善効果は大きい。

2023/11/26~12/08

引き続きRealTimeDBへの移行に向けた実装。

ほとんど毎日、けっこうな時間をかけて取り組み、DBへの書き込みも問題なく動くようになった。

これでようやく

  • キャンバス作成・読み込み
  • アイディアの移動や削除
  • レーンの挿入や削除
  • アイディア同士のリレーションの接続や編集
  • 設定画面

なども含めてほぼFirestoreからRealTimeDBに移行できたと言える。

10月後半からずっとRealTimeDBへの移行作業をやっていたので、1ヶ月半かかってしまったことになる。まあデータの持ち方から描画までほとんど作り直しに近かったので、仕方がない。

これでFirestoreと違って、何度読み書きしても回数では課金されない状態になった。
参考:Firebase FireStore と RealTime Database どちらを選ぶか – 開発日記(54)

またソース全体としても処理が整理されて、コーディングがとてもしやすくなった。

但しソフト上で操作をするたびにリアルタイムでDB反映することを実現した結果、当然非同期処理が大量になった。タイミングや順序など考慮すべきこと・気にすべきことも増えている。

特にUndo/Redo周りの処理はまだ完全では無い。普通に使う分にはなんとか動くがまだ怪しい。やはりUndo/Redoの制御は大変だ……。


※開発日記は当時の記録をもとに作成し、必要に応じて加筆・補足しています

この記事はアイディア整理ソフト「idea Lane」の開発記録です

どなたでも、ユーザ登録だけで無料ですぐに使えます
テキストベースの思考整理ツール「idea Lane」


コメント

タイトルとURLをコピーしました