LoginSignup
1
0

More than 5 years have passed since last update.

Ember Data 1.13のfind系の処理(主にキャッシュ)について

Posted at

動作させた環境

  • 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になるように制御しています。)

どうなったか

reloadfalse を設定した場合

findAll については常にstoreに保持されているデータを取得します。
findRecordについてはstoreに該当のレコードが保持されていなければ、最初の一家についてはサーバへ問い合わせを行います。それ以外はstoreの保持データを使います。

reloadtrue を設定した場合

findAll / findRecord ともにサーバ問い合わせを行いデータ取得を行います。
routeの model hookで利用した場合は、データ取得が解決してから画面遷移が完了します。

backgroundReload の場合

ここの記述を見るとbackgroundRelaodというオプションが使えそうですが、ソースコード(少なくとも1.13.8)を確認するかぎりでは、そのようなオプションは利用されていない様子でしたので、adaptershouldBackgroundReloadAll および shouldBackgroundReloadRecordtrue にすることで確認をしました。

route の model hook で利用している場合、
backgroundReload は、サーバ問い合わせを行うものの、その戻りを待たずに画面遷移を行う。その時点では store にキャッシュされているデータを利用し、サーバ問い合わせの結果が戻りしだい、model (= data-bind されている画面)に反映する動きとなる。

まとめ

ember 2.0系では、backgroundReloadのデフォルト値がtrueになると言うことのようですし、reloadの設定と併せて、余計なサーバ問い合わせを少なくして画面遷移をスムーズにしなさいと言う天の声なのかなと思っています。
(まあその通りなのですが)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0