動作させた環境
- ember 1.13.3
- ember data 1.13.5
- ember cli 1.13.1
確認したいこと
ember data 1.13では、store の検索系の関数が統一されていますが、主にキャッシュの処理について実際に動かして確認しました。
store の検索系の関数について
- findAll / findRecord
- サーバもしくはstoreの保持データのどちらかを取得します。
- peekAll / peekRecord
- storeの保持データを取得します。
- query / queryRecord
- サーバから検索します。
上記のように、サーバから取得するか、キャッシュされているデータを取得するかの両方あり得るのはfindAll
/ findRecord
のどちらかのみなので、それらの動作について確認します。
ソースコード
確認に使用したソースコードは、次のリポジトリにあります。
https://github.com/t-mimura/sample-ember-1-13-store-find
確認結果
前提
adapter
の次の項目については、基本的にはfalse
を返すように定義しています。
(確認によってはtrue
になるように制御しています。)
どうなったか
reload
に false
を設定した場合
findAll
については常にstore
に保持されているデータを取得します。
findRecord
についてはstore
に該当のレコードが保持されていなければ、最初の一家についてはサーバへ問い合わせを行います。それ以外はstore
の保持データを使います。
reload
に true
を設定した場合
findAll
/ findRecord
ともにサーバ問い合わせを行いデータ取得を行います。
route
の model hookで利用した場合は、データ取得が解決してから画面遷移が完了します。
backgroundReload
の場合
ここの記述を見るとbackgroundRelaod
というオプションが使えそうですが、ソースコード(少なくとも1.13.8)を確認するかぎりでは、そのようなオプションは利用されていない様子でしたので、adapter
の shouldBackgroundReloadAll
および shouldBackgroundReloadRecord
を true
にすることで確認をしました。
route
の model hook で利用している場合、
backgroundReload は、サーバ問い合わせを行うものの、その戻りを待たずに画面遷移を行う。その時点では store
にキャッシュされているデータを利用し、サーバ問い合わせの結果が戻りしだい、model (= data-bind されている画面)に反映する動きとなる。
まとめ
ember 2.0系では、backgroundReload
のデフォルト値がtrue
になると言うことのようですし、reload
の設定と併せて、余計なサーバ問い合わせを少なくして画面遷移をスムーズにしなさいと言う天の声なのかなと思っています。
(まあその通りなのですが)