モバイルアプリ · 中級
オフライン作業:エレベーターで壊れないアプリ
一行でいうと: ネットワークがないという仮定でアプリを設計すると、あるときも速く感じるアプリを無料で手に入れる。
基本的な仮定
携帯ネットワークはオン・オフのスイッチではなくスペクトラムだ:遅い、断続的、接続されているがスループットなし。良い接続を仮定するアプリは、ユーザーがそれを必要とするまさにそのときに無限のローディングスピナーを表示する。
正しいアプローチ:デバイスはローカルの信実の源を保持し、ネットワークはバックグラウンドの同期プロセスだ。
三つのメカニズム
読み取りキャッシュ。一度ロードされたものはすぐに再表示され、控えめな「更新中」マークが付く。
書き込みキュー。ユーザーのアクションはローカルに保存され、接続があるときに送信される。インターフェースはすぐに結果を表示する。
競合解決。二つのデバイスが同じアイテムを変更したとき何が起きるか。事前に決める:最後が勝つ、フィールドごとのマージ、またはユーザーへの確認。
ユーザーが見る必要があるもの
同期状態を静かだが明確に、まだ送信されていないものを。状態を完全に隠すことは、何かが消えたときに不信を生む。
さらに深く
各レコードにサーバーからのバージョンまたは更新タイムスタンプを保持し、競合を検出するために書き込み時に返す。なければ、並行する二つの更新は静かに上書きし合う——誰もエラーを受け取らないため、最悪のデータ損失だ。