モバイルアプリ · 中級

オフライン作業:エレベーターで壊れないアプリ

一行でいうと: ネットワークがないという仮定でアプリを設計すると、あるときも速く感じるアプリを無料で手に入れる。

基本的な仮定

携帯ネットワークはオン・オフのスイッチではなくスペクトラムだ:遅い、断続的、接続されているがスループットなし。良い接続を仮定するアプリは、ユーザーがそれを必要とするまさにそのときに無限のローディングスピナーを表示する。

正しいアプローチ:デバイスはローカルの信実の源を保持し、ネットワークはバックグラウンドの同期プロセスだ。

三つのメカニズム

読み取りキャッシュ。一度ロードされたものはすぐに再表示され、控えめな「更新中」マークが付く。

書き込みキュー。ユーザーのアクションはローカルに保存され、接続があるときに送信される。インターフェースはすぐに結果を表示する。

競合解決。二つのデバイスが同じアイテムを変更したとき何が起きるか。事前に決める:最後が勝つ、フィールドごとのマージ、またはユーザーへの確認。

ユーザーが見る必要があるもの

同期状態を静かだが明確に、まだ送信されていないものを。状態を完全に隠すことは、何かが消えたときに不信を生む。

さらに深く

各レコードにサーバーからのバージョンまたは更新タイムスタンプを保持し、競合を検出するために書き込み時に返す。なければ、並行する二つの更新は静かに上書きし合う——誰もエラーを受け取らないため、最悪のデータ損失だ。